DES 加密解密详解 CCCrypt函数
2016-12-28 16:23
423 查看
世界最美好的样子,便是有你的日子 一, 接触到加解密后,总结了一下AES, DES,3DES 加解密,其中 包含
<CommonCrypto/CommonCrypto.h>里的api 1, 主要注意 buffer 的内存大小。和 加解密结果的状态, 重点是
CCCrypt函数 直接上代码 首先包含加密用到的API头文件#import <CommonCrypto/CommonCrypto.h>1然后就是加密过程了//加密过程- (NSString*)encryptionType:(CCAlgorithm)encryptionType encodingStr:(NSString *)originStr key:(NSString*)key{ // 1, 将 str装换成 data数据 NSData * baseData = [originStrdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES]; size_t dataOutOffset =0; NSUInteger dataLength = baseData.length +100+[keydataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES].length; unsigned char buffer[dataLength]; memset(buffer,0,sizeof(char)); CCCryptorStatus cryptorStatus =CCCrypt( kCCEncrypt, // 加密还是解密 encryptionType, // 加密的方式 DES, 3DES, AES kCCOptionPKCS7Padding|kCCOptionECBMode, [key UTF8String], //把key转换为C串 keyLength, //秘钥的size,固定的 kCCKeySizeDES,kCCKeySize3DES nil, [baseData bytes], [baseData length], buffer, // 注意接收加密的buffer的大小 dataLength, // &dataOutOffset // ); NSString * encoding=@""; if (cryptorStatus ==kCCSuccess) { NSData * data = [NSDatadataWithBytes:bufferlength:dataOutOffset]; encoding = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSLog(@"加密后的串:[%@]", encoding); }else NSLog(@"加密失败!%d",cryptorStatus); return encoding; }最后是解密过程//2, 解密与加密对应- (NSString *)decryptionType:(CCAlgorithm)decryptionType decryptionStr:(NSString *)baseStr key:(NSString*)key{ //因为加密后的data 是用 base64 显示的,所以这里要先将baseStr 用 base64解密成data。 NSData * baseData = [[NSDataalloc]initWithBase64EncodedString:baseStroptions:NSDataBase64DecodingIgnoreUnknownCharacters]; NSUInteger dataLength = baseData.length +100+[keydataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES].length; unsigned char buffer[dataLength]; memset(buffer,0,sizeof(char)); size_t dataOffset =0; CCCryptorStatus status =CCCrypt(kCCDecrypt, decryptionType, kCCOptionPKCS7Padding|kCCOptionECBMode, [key UTF8String], keyLength, nil, [baseData bytes], [baseData length], buffer, dataLength, &dataOffset ); NSString * decodingStr =nil; if (status ==0) { NSData * data = [[NSDataalloc]initWithBytes:bufferlength:dataOffset]; decodingStr = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding]; NSLog(@"解密后的串:[%@]", decodingStr); } else NSLog(@"解密失败;"); return decodingStr;// CCCryptorStatus status = CCCrypt(CCOperation op,// CCAlgorithm alg,// CCOptions options,// const void *key,// size_t keyLength,// const void *iv,// const void *dataIn,// size_t dataInLength,// void *dataOut,// size_t dataOutAvailable,// size_t *dataOutMoved )}这个加解密过程支持英文,中文,数字,特殊符号!
输出结果 2017-10-26 10:21:13.872466+0800 Encryped[1234:363896] 加密后的串:[txy0DYBpvlac2jEh5KS0uQ==] 2017-10-26 10:21:13.872746+0800 Encryped[1234:363896] 解密后的串:[crypto] 2017-10-26 10:24:27.443502+0800 Encryped[1234:363896] 加密后的串:[iW47IPpbH5Eks1APH+ZDpaUdYV/Lb/ykqybXhOfuqUItaOOUTYFwURQpZdXt+ZpD] 2017-10-26 10:24:27.443763+0800 Encryped[1234:363896] 解密后的串:[{“加密的”:”*&^%$#~!@@abcj”}]12345源码地址
相关文章推荐
- 用ASP编写的加密和解密类
- 解密网页加密的两个方法
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- BAT加密工具 EncryBat 非编译型bat批处理加密方案与代码
- C#对称加密(AES加密)每次生成的结果都不同的实现思路和代码实例
- SQLServer 2008中的代码安全(一) 存储过程加密与安全上下文
- 实例讲解SQL Server加密功能
- C#编写DES加密、解密类
- C#实现对文件进行加密解密的方法
- C#实现数据包加密与解密实例详解
- C#最简单的字符串加密解密方法
- C#加密app.config中连接字符串的方法
- Oracle数据加密方法分析
- C#使用伪随机数实现加密用户密码的方法
- asp MD5加密方式使用建议
- .NET实现一机一码加密、把EXE变成图片运行,被破解自动销毁随时授权回收
- SQL Server解密存储过程
- 对称加密和非对称加密概念和区别
- PHP的几个常用加密函数