我想解密一个用 Objective-C 编码的AES
加密字符串:Base64
这是我的代码:
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
, status = 0, output = {}。
我在 SO 上检查了许多代码示例,但没有发现我的代码有任何问题。
您对我的代码可能有什么问题有任何想法吗?
顺便说一句:base64string
我在这个示例代码中使用的代码是使用这个开源框架在 JavaScript 中创建的:http ://www.movable-type.co.uk/scripts/aes.html 。我不知道这些信息是否有帮助。