iOS开发-DES加密解密算法
前几天后台给了一个Java代码的加解密方式,让我这边直接用。我对应着Java上解密方法找到一些适合iOS的DES加解密算法,特总结一下
1、使用DES加密:
//加密
+(NSString *) encryptUseDES2:(NSString *)plainText key:(NSString *)key{ NSString *ciphertext = nil; const char *textBytes = [plainText UTF8String]; size_t dataLength = [plainText length]; //==================
uint8_t *bufferPtr = NULL; size_t bufferPtrSize = 0; size_t movedBytes = 0; bufferPtrSize = (dataLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1); bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t)); memset((void *)bufferPtr, 0x0, bufferPtrSize); NSString *testString = key; NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding]; Byte *iv = (Byte *)[testData bytes]; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, textBytes, dataLength, (void *)bufferPtr, bufferPtrSize, &movedBytes); if (cryptStatus == kCCSuccess) {ciphertext= [XuDes parseByte2HexString:bufferPtr :(int)movedBytes]; } ciphertext=[ciphertext uppercaseString];
//字符变大写
return ciphertext ;}
2、使用DES解密
//解密
+(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key{ NSData* cipherData = [XuDes convertHexStrToData:[cipherText lowercaseString]]; NSLog(@"++++++++///%@",cipherData); unsigned char buffer[1024]; memset(buffer, 0, sizeof(char)); size_t numBytesDecrypted = 0; NSString *testString = key; NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding]; Byte *iv = (Byte *)[testData bytes]; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, [cipherData bytes], [cipherData length], buffer, 1024, &numBytesDecrypted); NSString* plainText = nil; if (cryptStatus == kCCSuccess) { NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted]; plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } return plainText;}
//解密2
-(NSString*) decryptUseDES2:(NSString*)cipherText key:(NSString*)key {// 利用 GTMBase64 解碼 Base64 字串
// NSData* cipherData = [GTMBase64 decodeData:[cipherText dataUsingEncoding:NSUTF8StringEncoding]];NSData* cipherData = [self convertHexStrToData:[cipherText lowercaseString]];size_t bufferSize = [cipherData length] + kCCBlockSizeDES & ~(kCCBlockSizeDES - 1);unsigned char buffer[bufferSize];memset(buffer, 0, sizeof(char));size_t numBytesDecrypted = 0;// IV 偏移量不需使用CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,kCCAlgorithmDES,kCCOptionPKCS7Padding | kCCOptionECBMode,[key UTF8String],kCCKeySizeDES,nil,[cipherData bytes],[cipherData length],buffer,bufferSize,//1024,&numBytesDecrypted);NSString* plainText = nil;if (cryptStatus == kCCSuccess) {NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];}return plainText;
}
加密解密中有两个方法调用,其实是为了16进制与data之间的转换。有些宝宝们的公司并未转换成16进制,而是需要跟base64共同加解密。方法适用,只需要将得出的plainText 的值转成base64即可。
加密时转成16进制
+(NSString *) parseByte2HexString:(Byte *) bytes:(int)len{NSString *hexStr = @"";if(bytes){for(int i=0;i<len;i++){NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff]; ///16进制数if([newHexStr length]==1)hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];else{hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];}NSLog(@"%@",hexStr);}}return hexStr;}
解密时转回data
+ (NSData *)convertHexStrToData:(NSString *)str {if (!str || [str length] == 0) {return nil;}NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];NSRange range;if ([str length] % 2 == 0) {range = NSMakeRange(0, 2);} else {range = NSMakeRange(0, 1);}for (NSInteger i = range.location; i < [str length]; i += 2) {unsigned int anInt;NSString *hexCharStr = [str substringWithRange:range];NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];[scanner scanHexInt:&anInt];NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];[hexData appendData:entity];range.location += range.length;range.length = 2;}NSLog(@"hexdata: %@", hexData);return hexData;}
iOS开发-DES加密解密算法相关推荐
- DES加密解密算法(前端后端)
DES加密解密算法(前端&后端) 原作者 阿弥陀佛1114 原文链接:https://blog.csdn.net/zong1114/article/details/51754470 DES对 ...
- java 实现 DES加密 解密算法
DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...
- DES加密解密算法Java实现
DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小.这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半.使用子密钥对其中一半应 ...
- C# DES加密解密算法
C# DES加密解密算法 #region DES Class /// <summary> /// ClassName: DES 加密类 /// DES加密.解密类库,字符串加密结果使用BA ...
- Java简单实现DES加密解密算法
Java简单实现DES加密解密算法 文章目录 Java简单实现DES加密解密算法 DES算法介绍 实现相关java类 代码实现 DES算法介绍 DEC加密算法属于对称加密,即利用指定的密钥,按照密码的 ...
- java写微信小程序答辩问题_java微信小程序开发中加密解密算法总结
详解java微信小程序开发中加密解密算法 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H5.还接入了小程序开发.但是,小程序中竟然没有提供Java版本的加密数据解密算法.这着实让 ...
- 在Java中使用DES加密解密算法
import javax.crypto.*; import javax.crypto.spec.DESKeySpec; import java.security.NoSuchAlgorithmExce ...
- C++实现DES加密解密算法
文章目录 第一部分 DES概述 1.1 DES数据加密标准简介 1.2 DES算法流程 第二部分 DES的C++实现 第三部分 代码演示 3.1 待加密的明文文件demo.txt: 3.2 加密解密程 ...
- iOS开发 RSA加密解密与后台之间的双向加密详解
转载自:https://www.jianshu.com/p/43f7fc8d8e14 序言 因为项目中需要用到RSA加密,刚开始也是有点乱,这两天也整理的差不多了,希望能帮到大家.这次先上代码,我想大 ...
最新文章
- 为什么博图中放置按下按钮无反应_如何更好的设计按钮
- js_高级_表格排序案例---分别用面向过程和面向对象实现
- java练习:打印 数字1、2、3、4的组合,不能以4开头,1和3不能相邻,且数字不能重复
- 使用VS2019编写C语言程序,环境安装配置+代码调试
- java h5在线音频_[语音技术]java+H5的录音类实例(1)
- 【远程操控】Pycharm远程连接服务器之本地显示独立的plot窗口
- 计算机组成原理xchg,8088数据传送指令-计算机组成原理与汇编语言-电子发烧友网站...
- uploadify scriptData参数无法传参的问题
- 推荐一个值得加入C++开发者俱乐部
- 地震了?不,是心动了!
- Avalanche发布AvalancheGo v1.2.3版本
- sqk-maven-plugin 插件样例
- 在Latex中插入FontAwesome图标
- java写颜色识别_Java+Opencv 颜色识别
- Codeforces Round #633 (Div. 2) C. Powered Addition
- 手机怎么进ph_关于pH调整的有效方法
- ICC学习——LAB0A
- linux环境MySQL8.0安装
- 3分钟看懂:7大教育培训企业邮件营销 (附案例)
- 为什么要进行傅立叶变换?如何用Matlab实现快速傅立叶变换?