使用NSData作为密钥的AES128解密

时间:2013-01-28 12:44:57

标签: objective-c encryption aes

我很难用NSData解密NSData key。虽然使用NSString解密一切正常,但是以数据作为键,该方法返回null NSData,尽管状态正常,并且该键的数据也正确。这是我的电话

NSData *decrypted = [AES AES128DecryptWithKey:data key:mute];
NSLog(@"DECRYPTED >> %@", decrypted);

我的方法

+ (NSData*)AES128DecryptWithKey:(NSData*) data key:(NSData*)key {

    NSUInteger dataLength = [data length];
    NSLog(@"trying to decrypt >> %@ with key >> %@", data, key );

    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);

    size_t numBytesDecrypted    = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                          [key bytes], kCCKeySizeAES128,
                                          NULL /* initialization vector (optional) */,
                                          [data bytes], dataLength, /* input */
                                          buffer, bufferSize, /* output */
                                          &numBytesDecrypted);
    NSLog(@"cryptstatus %d", cryptStatus);
    if (cryptStatus == kCCSuccess)
    {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
    }

    free(buffer); //free the buffer;
    return nil;
}

NSLog输出:

trying to decrypt >> <152f052e 79436003 7a9c1a59 3b82f1c4>
with key >> <1b510e76 ac0000a1 027af26a e25ad24a>
cryptstatus 0
DECRYPTED >> <>

看着RNEncryptor,但它只有aes256,而我需要128.任何想法?

1 个答案:

答案 0 :(得分:1)

单字节块可能只包含填充字节。在这种情况下,零字节将是预期的结果。

对于您的密文不是这种情况,在您的情况下,在加密期间没有应用填充,因此当您尝试取消填充数据时会出现故障。