OStack程序员社区-中国程序员成长平台

标题: ios - 使用 AES 解密 Base64 编码的字符串会导致错误状态 4301(缓冲区太小) [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 16:38
标题: ios - 使用 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

根据文档,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-推荐答案


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

关于ios - 使用 AES 解密 Base64 编码的字符串会导致错误状态 4301(缓冲区太小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20092911/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4