• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:38:18 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想解密一个 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap