美文网首页
iOS--CCCrypt函数

iOS--CCCrypt函数

作者: OXHO | 来源:发表于2019-05-07 02:00 被阅读0次
    CCCryptorStatus CCCrypt(
        CCOperation op,         /* kCCEncrypt, etc. */
        CCAlgorithm alg,        /* kCCAlgorithmAES128, etc. */
        CCOptions options,      /* kCCOptionPKCS7Padding, etc. */
        const void *key,
        size_t keyLength,
        const void *iv,         /* optional initialization vector */
        const void *dataIn,     /* optional per op and alg */
        size_t dataInLength,
        void *dataOut,          /* data RETURNED here */
        size_t dataOutAvailable,
        size_t *dataOutMoved)
        API_AVAILABLE(macos(10.4), ios(2.0));
    

    它是对称加密算法的核心函数,参数有点多,共计11个参数,用于加密,和解密,都是它。

    /**CCCrypt 对称加密算法的核心函数(加密/解密)
         参数:
         1、kCCEncrypt 加密/kCCDecrypt 解密
         2、加密算法、默认的 AES/DES
         3、加密方式的选项
            kCCOptionPKCS7Padding | kCCOptionECBMode;//ECB加密!
            kCCOptionPKCS7Padding;//CBC 加密!
         4、加密密钥
         5、密钥长度
         6、iv 初始化向量,ECB 不需要指定
         7、加密的数据
         8、加密的数据长度
         9、缓冲区(地址),存放密文的
         10、缓冲区的大小
         11、加密结果大小
         */
    

    封装例子:

    /**
         *  解密字符串
         *
         *  @param string    加密并base64编码后的字符串
         *  @param keyString 解密密钥
         *  @param iv        初始化向量(8个字节)
         *
         *  @return 返回解密后的字符串
         */
    - (NSString *)decryptString:(NSString *)string keyString:(NSString *)keyString iv:(NSData *)iv {
        
        // 设置秘钥
        NSData *keyData = [keyString dataUsingEncoding:NSUTF8StringEncoding];
        uint8_t cKey[self.keySize];
        bzero(cKey, sizeof(cKey));
        [keyData getBytes:cKey length:self.keySize];
        
        // 设置iv
        uint8_t cIv[self.blockSize];
        bzero(cIv, self.blockSize);
        int option = 0;
        if (iv) {
            [iv getBytes:cIv length:self.blockSize];
            option = kCCOptionPKCS7Padding;//CBC 加密!
        } else {
            option = kCCOptionPKCS7Padding | kCCOptionECBMode;//ECB加密!
        }
        
        // 设置输出缓冲区
        NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:0];
        size_t bufferSize = [data length] + self.blockSize;
        void *buffer = malloc(bufferSize);
        
        // 开始解密
        size_t decryptedSize = 0;
    
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                              self.algorithm,
                                              option,
                                              cKey,
                                              self.keySize,
                                              cIv,
                                              [data bytes],
                                              [data length],
                                              buffer,
                                              bufferSize,
                                              &decryptedSize);
        
        NSData *result = nil;
        if (cryptStatus == kCCSuccess) {
            result = [NSData dataWithBytesNoCopy:buffer length:decryptedSize];
        } else {
            free(buffer);
            NSLog(@"[错误] 解密失败|状态编码: %d", cryptStatus);
        }
        
        return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
    }
    

    相关文章

      网友评论

          本文标题:iOS--CCCrypt函数

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