您的位置:首页 > 其它

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源码地址
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  解密 加密 CCCrypt