前几天后台给了一个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加密解密算法相关推荐

  1. DES加密解密算法(前端后端)

    DES加密解密算法(前端&后端) 原作者 阿弥陀佛1114  原文链接:https://blog.csdn.net/zong1114/article/details/51754470 DES对 ...

  2. java 实现 DES加密 解密算法

    DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...

  3. DES加密解密算法Java实现

    DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小.这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半.使用子密钥对其中一半应 ...

  4. C# DES加密解密算法

    C# DES加密解密算法 #region DES Class /// <summary> /// ClassName: DES 加密类 /// DES加密.解密类库,字符串加密结果使用BA ...

  5. Java简单实现DES加密解密算法

    Java简单实现DES加密解密算法 文章目录 Java简单实现DES加密解密算法 DES算法介绍 实现相关java类 代码实现 DES算法介绍 DEC加密算法属于对称加密,即利用指定的密钥,按照密码的 ...

  6. java写微信小程序答辩问题_java微信小程序开发中加密解密算法总结

    详解java微信小程序开发中加密解密算法 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H5.还接入了小程序开发.但是,小程序中竟然没有提供Java版本的加密数据解密算法.这着实让 ...

  7. 在Java中使用DES加密解密算法

    import javax.crypto.*; import javax.crypto.spec.DESKeySpec; import java.security.NoSuchAlgorithmExce ...

  8. C++实现DES加密解密算法

    文章目录 第一部分 DES概述 1.1 DES数据加密标准简介 1.2 DES算法流程 第二部分 DES的C++实现 第三部分 代码演示 3.1 待加密的明文文件demo.txt: 3.2 加密解密程 ...

  9. iOS开发 RSA加密解密与后台之间的双向加密详解

    转载自:https://www.jianshu.com/p/43f7fc8d8e14 序言 因为项目中需要用到RSA加密,刚开始也是有点乱,这两天也整理的差不多了,希望能帮到大家.这次先上代码,我想大 ...

最新文章

  1. 为什么博图中放置按下按钮无反应_如何更好的设计按钮
  2. js_高级_表格排序案例---分别用面向过程和面向对象实现
  3. java练习:打印 数字1、2、3、4的组合,不能以4开头,1和3不能相邻,且数字不能重复
  4. 使用VS2019编写C语言程序,环境安装配置+代码调试
  5. java h5在线音频_[语音技术]java+H5的录音类实例(1)
  6. 【远程操控】Pycharm远程连接服务器之本地显示独立的plot窗口
  7. 计算机组成原理xchg,8088数据传送指令-计算机组成原理与汇编语言-电子发烧友网站...
  8. uploadify scriptData参数无法传参的问题
  9. 推荐一个值得加入C++开发者俱乐部
  10. 地震了?不,是心动了!
  11. Avalanche发布AvalancheGo v1.2.3版本
  12. sqk-maven-plugin 插件样例
  13. 在Latex中插入FontAwesome图标
  14. java写颜色识别_Java+Opencv 颜色识别
  15. Codeforces Round #633 (Div. 2) C. Powered Addition
  16. 手机怎么进ph_关于pH调整的有效方法
  17. ICC学习——LAB0A
  18. linux环境MySQL8.0安装
  19. 3分钟看懂:7大教育培训企业邮件营销 (附案例)
  20. 为什么要进行傅立叶变换?如何用Matlab实现快速傅立叶变换?

热门文章

  1. 第 256 场力扣周赛(状态压缩+dp,二进制子序列的动规、940)
  2. Grbl v1.1版本的编译方法
  3. 二元函数可微与偏导数_二元函数的连续、偏导数、可微之间的关系
  4. 神经网络之反向传播算法(均方根反向传播算法RMSProp)
  5. 数值积分之龙贝格积分
  6. Romberg(龙贝格)积分法 | matlab
  7. 海康摄像头二次开发python_海康摄像头的二次开发(java)
  8. Gan(生成式对抗网络)
  9. pip及openpyxl安装
  10. 用echartsjs 实现动态绘制折线、柱状等图形,并实现多图联动效果