iOS DES 加密解密详解 CCCrypt函数

大家好,我是OB。
骐骥一跃,不能十步,驽马十驾,功在不舍。今天给大家分享一下iOS DES CCCrypt函数

 

一, 接触到加解密后,总结了一下AES, DES,3DES 加解密,其中 包含 <CommonCrypto/CommonCrypto.h>里的api 


1, 主要注意 buffer 的内存大小。和 加解密结果的状态, 重点是  CCCrypt 函数 
直接上代码 
首先包含加密用到的API头文件

#import <CommonCrypto/CommonCrypto.h>

然后就是加密过程了

//加密过程

- (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;
}

这个加解密过程支持英文,中文,数字,特殊符号!

 

输出结果
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”}]

看图

 

源码地址

 

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值