iOS--算法--DES篇
来源:互联网 发布:苏州网站网络推广公司 编辑:程序博客网 时间:2024/06/10 00:38
DES作为一种重要的对称加密算法,即使是iOS上也同样受到很大欢迎。这里介绍一下DES的CBC模式的iOS实现。至于ECB模式,这里有一篇文章来介绍,传送门->。
如果想了解更多模式,请看这里,传送门->。
不多说了,贴代码!
#import <Foundation/Foundation.h>#import <CommonCrypto/CommonCryptor.h>@interface NSString (DES)+ (NSString *)DES_EncryptWithText:(NSString *)sText;+ (NSString *)DES_DecryptWithText:(NSString *)sText;+ (NSString *)DES_WithText:(NSString *)sText encryptOrDecrypt:(CCOperation)operation key:(NSString *)key;@end
#import "NSString+DES.h"@implementation NSString (DES)+ (NSString *)DES_EncryptWithText:(NSString *)sText{ //kCCEncrypt 加密 return [self DES_WithText:sText encryptOrDecrypt:kCCEncrypt key:@"des"];}+ (NSString *)DES_DecryptWithText:(NSString *)sText{ //kCCDecrypt 解密 return [self DES_WithText:sText encryptOrDecrypt:kCCDecrypt key:@"des"];}+ (NSString *)DES_WithText:(NSString *)sText encryptOrDecrypt:(CCOperation)operation key:(NSString *)key{ const void *dataIn; size_t dataInLength; if (operation == kCCDecrypt)// 解码 { //解码 base64 NSData *decryptData = [[NSData alloc]initWithBase64EncodedString:sText options:NSDataBase64DecodingIgnoreUnknownCharacters];;//转成utf-8并decode dataInLength = [decryptData length]; dataIn = [decryptData bytes]; } else //encrypt { NSData* encryptData = [sText dataUsingEncoding:NSUTF8StringEncoding]; dataInLength = [encryptData length]; dataIn = (const void *)[encryptData bytes]; } /* DES加密 :用CCCrypt函数加密一下,然后用base64编码下,传过去 DES解密 :把收到的数据根据base64,decode一下,然后再用CCCrypt函数解密,得到原本的数据 */ CCCryptorStatus ccStatus; uint8_t *dataOut = NULL; size_t dataOutAvailable = 0; //size_t 是操作符sizeof返回的结果类型 size_t dataOutMoved = 0; dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1); dataOut = malloc( dataOutAvailable * sizeof(uint8_t)); memset((void *)dataOut, 0x0, dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0 const void *vkey = (const void *) [key UTF8String]; static Byte iv[] = {1,2,3,4,5,6,7,8}; //初始向量会影响最后加密出来的密文! //CCCrypt函数 加密/解密 ccStatus = CCCrypt(operation,// 加密/解密 kCCAlgorithmDES,// 加密根据哪个标准(des,3des,aes。。。。) kCCOptionPKCS7Padding,// 选项分组密码算法 默认是cbc模式 vkey, //密钥 加密和解密的密钥必须一致 kCCKeySizeDES,// DES 密钥的大小(kCCKeySizeDES=8) iv, // 可选的初始矢量 dataIn, // 数据的存储单元 dataInLength,// 数据的大小 (void *)dataOut,// 用于返回数据 dataOutAvailable, &dataOutMoved); NSString *result = nil; if (ccStatus == kCCSuccess) { if (operation == kCCDecrypt)//encryptOperation==1 解码 { //得到解密出来的data数据,改变为utf-8的字符串 result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding]; } else { //加密 最后输出base64文本 NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved]; result = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; } }else { NSLog(@"加密or解密失败"); } return result;}@end
文中关于初始向量iv的解释请看这里,传送门->。
另外,如果你想和java服务器一通协调工作,可以看看这里~传送门->。
0 0
- iOS--算法--DES篇
- 算法-加密/解密-DES(数据加密标准)
- 3DES-待完善
- 加密篇之一 - 对称加密算法 DES,AES,PBE
- DES & 3DES算法
- DES算法
- des算法
- DES算法
- DES算法
- DES算法
- DES算法
- DES算法
- DES算法
- DES算法
- des算法
- DES 算法
- DES算法
- DES算法
- 【彩票】彩票预测算法(一):离散型马尔可夫链模型C#实现
- 注册页面实现
- Huffman霍夫曼压缩编码算法实现分析
- Dreamweaver CS6破解教程[序列号+破解补丁]
- 115:Distinct Subsequences【DP】【字符串】
- iOS--算法--DES篇
- 创造属于你的价值
- 相关技能 FOR RD
- Problem B: 星系炸弹
- 【彩票】C#玩高频数字彩快3的一点体会
- 拓扑排序--关键路径
- 编程之美-格格取数
- Dell Inspiron 14R-N4041笔记本硬盘损坏更换手记
- JAVA_SE基础——3.Java程序的开发流程