美文网首页
ios des 加密长度的坑

ios des 加密长度的坑

作者: 小程故事多又多 | 来源:发表于2019-07-16 23:23 被阅读0次

今天在做des加密的时候,在网上找到这段代码 挺好用的,demo测试没什么问题

//加密
-(NSString *)encryptUseDES:(NSString *)plainText andKey:(NSString *)authKey{
    const void *iv  = (const void *) [@"12345678" UTF8String];
    
    NSString *ciphertext = nil;
    
    NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
    NSUInteger dataLength = [textData length];
    NSInteger bufferLength = (dataLength/1024 +1)*1024;
    unsigned char buffer[bufferLength];
    memset(buffer, 0, sizeof(char) * bufferLength);
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding,
                                          [authKey UTF8String],
                                          kCCKeySizeDES,
                                          iv,
                                          [textData bytes],
                                          dataLength,
                                          buffer,
                                          bufferLength,
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
        ciphertext = [data base64EncodedStringWithOptions:0];
    }
    return ciphertext;
}

但是当我们加密长度大于1M的数据时 直接崩溃了


image.png

于是查询出来问题出在这里 创建的buffer 无法在内存中分配到足够大的内存

unsigned char buffer[bufferLength];

在大神的指点下换了一个分配方式解决了问题

    unsigned char * buffer = (unsigned  char *)malloc(bufferLength);
    memset(buffer, 0, sizeof(char) * bufferLength);

记得最后释放内存

   free(buffer);

完整代码如下

//加密
-(NSString *)encryptUseDES:(NSString *)plainText andKey:(NSString *)authKey{
    const void *iv  = (const void *) [@"12345678" UTF8String];
    
    NSString *ciphertext = nil;
    
    NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
    
    NSUInteger dataLength = [textData length];
    NSInteger bufferLength = (dataLength/1024 +1)*1024;
    //    unsigned char buffer[bufferLength];
    
    unsigned char * buffer = (unsigned  char *)malloc(bufferLength);
    memset(buffer, 0, sizeof(char) * bufferLength);
    size_t numBytesEncrypted = 0;
    
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding,
                                          [authKey UTF8String],
                                          kCCKeySizeDES,
                                          iv,
                                          [textData bytes],
                                          dataLength,
                                          buffer,
                                          bufferLength,
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
        ciphertext = [data base64EncodedStringWithOptions:0];
    }
    free(buffer);
    return ciphertext;
}

相关文章

  • ios des 加密长度的坑

    今天在做des加密的时候,在网上找到这段代码 挺好用的,demo测试没什么问题 但是当我们加密长度大于1M的数据时...

  • Android Des/3DES加解密

    1、3DES加解密 DES加密分为 单DES和 3DES加密 单DES加密是8个字节长度加密 3DES加密分为:双...

  • 面试题总结

    1. iOS开发中的加密方式 iOS加密相关算法框架:CommonCrypto。 对称加密: DES、3DES、A...

  • iOS 笔记之_时间戳 + DES 加密

    iOS 时间戳 + DES 加密 时间戳 DES 加密解密 加密内容:helloWorldDES加密成功加密结果:...

  • java DES 加密

    注意:1、DES加密时 key长度大于82、 transformation 为"DES/ECB/PKCS7Padd...

  • DES加密 解密 java和iOS 保持一致

    1.java/android DES加密解密 base64编码用的jdk1.8 2.iOS DES加密解密

  • ios 加密

    1、常见加密算法 : 对称加密:AES、DES、3DES、RC4 优点:加解密速度快 没有长度限制 缺点:密钥容易...

  • 常用加密算法比较

    DES加密算法 DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。...

  • IOS的签名机制

    前言 了解IOS的数字签名机制之前我们需要掌握以下几个知识:加密解密(对称加密(DES 3DES AES),非对称...

  • ios的DES加密遇到的坑

    1.刚知道要做DES加密以为很简单,网上代码很多,各种DES加密,大致都一样。然而我们的后台的安卓是用的一套DES...

网友评论

      本文标题:ios des 加密长度的坑

      本文链接:https://www.haomeiwen.com/subject/cxixlctx.html