我想解密一个 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
根据文档,Status 4301 = "buffer too small"
调试我的代码时,变量设置如下:
base64Data = 4701f428 14918c52 894181ac 0b37b4
dataLength = 15 bytes
unencryptedLength = 0
unencryptedData = {}
只有设置了选项kCCOptionPKCS7Padding 时才会出现错误,如果设置为0 ,status = 0,output = {}。
我在 SO 上检查了许多代码示例,但没有发现我的代码有任何问题。
你知道我的代码有什么问题吗?
顺便说一句:我在此示例代码中使用的 base64string 是使用以下开源框架在 JavaScript 中创建的:http://www.movable-type.co.uk/scripts/aes.html .我不知道这些信息是否有帮助。
Best Answer-推荐答案 strong>
您在 CCCrypt 中的倒数第二个参数应该是 dataOutAvailable。您传递了 dataLength,这似乎是 inData 的长度(您已经正确地作为参数传递了)。
关于ios - 使用 AES 解密 Base64 编码的字符串会导致错误状态 4301(缓冲区太小),我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/20092911/
|