0

我很难NSDataNSData 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。有什么想法吗?

4

1 回答 1

1

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

这不是您的密文的情况,在您的情况下,加密期间没有应用填充,因此当您尝试取消填充数据时会失败。

于 2013-01-28T13:38:36.977 回答