使用 kCCAlgorithmAES128 的 iOS CCCrypt kCCDecrypt

标签 ios commoncrypto

这是代码:

- (NSData *) doCipher: (NSData *) plainData key: (NSData *) symmetricKey context:   (CCOperation) encryptOrDecrypt padding: (CCOptions *) pkcs7
{
// Initialization vector; dummy in this case 0's.
uint8_t iv[kChosenCipherBlockSize];
bzero((void *) iv, (size_t) sizeof(iv));

// We don't want to toss padding on if we don't need to
if (encryptOrDecrypt == kCCEncrypt)
{
    if (*pkcs7 != kCCOptionECBMode)
    {
        if ((plainData.length  % kChosenCipherBlockSize) == 0)
            *pkcs7 = 0x0000;
        else
            *pkcs7 = kCCOptionPKCS7Padding;
    }
}
else if (encryptOrDecrypt == kCCDecrypt)
{
    *pkcs7 = 0x0000;
}
else
{
    DLog(@"Invalid CCOperation parameter [%d] for cipher context.", *pkcs7);
    return nil;
}

// Actually perform the encryption or decryption.
NSMutableData *dataOut  = [NSMutableData dataWithLength: plainData.length + kChosenCipherBlockSize];
size_t movedBytes       = 0;

CCCryptorStatus ccStatus = CCCrypt(encryptOrDecrypt,
        kCCAlgorithmAES128,
        *pkcs7,
        symmetricKey.bytes,
        kChosenCipherKeySize,
        iv,
        [plainData bytes],
        [plainData length],
        [dataOut mutableBytes],
        [dataOut length],
        &movedBytes
);

if (ccStatus == noErr)
{
    dataOut.length = movedBytes;
}
else
{
    DLog(@"Problem with encipherment ccStatus == %d", ccStatus);
    return nil;
}

return dataOut;
}

当我在 kCCDecrypt 上使用 kCCOptionPKCS7Padding 时,有时会收到错误代码 4304。 当 kCCDecrypt 时,我尝试不使用填充,如此处所述 Anyone else having trouble with iOS 5 encryption? 我没有收到错误消息。但有时kCCDecrypt之后的数据长度与kCCEncrypt之前的原始数据长度不一样。我认为这是因为原始数据长度没有乘以编码 block 大小。

还有人遇到这个问题吗?

最佳答案

你不能直接扔掉填充。保留填充,一切都会好起来的。

另请参阅:Encrypting 16 bytes of UTF8 with SecKeyWrapper breaks (ccStatus == -4304)

关于使用 kCCAlgorithmAES128 的 iOS CCCrypt kCCDecrypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10503556/

相关文章:

ios - 使用 AES 进行数据加密

ios - 为 swift 添加 Commoncrypto 文件后生成错误

ios - Tesseract OCR 无法识别除法符号 "÷"

ios - 索引的 Swift 数组设置值不起作用

ios - 当应用程序在后台并执行功能时,我如何处理本地通知?

ios - 如何在 iPhone 上安全存储 AES key

ios - View Controller 中的两个饼图

ios - iOS图片库水平滚动

ios - 在 iOS 中将错误代码转换为文本

objective-c - 将 Objective-C 代码转换为 Swift