使用 AES 解密 Base64 编码字符串会导致错误状态 4301(缓冲区太小)



我想解密一个AES加密字符串,该字符串Base64在Objective-C中编码:

这是我的代码:

NSString *base64String = @"RwH0KBSRjFKJQYGsCze0";
NSData *base64Data = [[NSData alloc] initWithBase64EncodedString:
     base64String options:0];
char * key = "shouldbe16chars.";
NSUInteger dataLength = [base64Data length];
uint8_t unencryptedData[dataLength + kCCKeySizeAES128];
size_t unencryptedLength;
CCCryptorStatus status = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
    0 , key,kCCKeySizeAES128, NULL, [base64Data bytes], 
    [base64Data length], unencryptedData, dataLength, 
    &unencryptedLength);
NSString *output = [[NSString alloc] initWithBytes:
     unencryptedData length:unencryptedLength 
     encoding:NSUTF8StringEncoding];
NSLog(@"status: %d output: %@",status, output);

运行代码时,结果为:Status = -4301, output = null

根据文档,状态 4301 ="缓冲区太小">

调试代码时,变量设置如下:

base64Data = 4701f428 14918c52 894181ac 0b37b4
dataLength = 15 bytes
unencryptedLength = 0
unencryptedData = {}

仅当设置了选项 kCCOptionPKCS7Padding 时,如果设置为 0 ,则状态 = 0,输出 = {},才会发生错误。

我已经检查了许多关于SO的代码示例,但没有发现我的代码有任何问题。

你知道我的代码可能有什么问题吗?

顺便说一句:我在此示例代码中使用的base64string是使用这个开源框架在 JavaScript 中创建的:http://www.movable-type.co.uk/scripts/aes.html。我不知道这些信息是否有帮助。

CCCrypt 中的倒数第二个参数应该是 dataOutAvailable。你传递 dataLength,这似乎是 inData 的长度(你已经正确地作为参数传递了它(。

最新更新