You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Base64编码的NSString正确转换为NSData对象

问题说明

原有代码使用NSUTF8StringEncoding转换字符串得到的是Base64文本本身的字符字节,并非Base64编码对应的原始二进制内容,无法满足后续AES256 CBC加密的输入要求。

修复方案

直接使用Foundation框架自带的Base64解码方法,将读取到的Base64字符串解码为原始二进制数据,替换原有的UTF8编码转换逻辑即可,修复后的代码如下:

NSString* str = @"somelongbase64stringreadfromsmallimagefile";
// 替换原UTF8转换逻辑:对Base64字符串做解码得到原始二进制数据
NSData* data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
// 后续AES加密缓冲区初始化逻辑无需改动,AES256块大小与AES128一致均为16字节,kCCBlockSizeAES128可正常使用
NSMutableData * buffer = [[NSMutableData alloc] initWithLength:[data length] + kCCBlockSizeAES128];
注意事项
  • 解码选项NSDataBase64DecodingIgnoreUnknownCharacters会自动忽略Base64字符串中混入的换行、空格、特殊占位符等非法字符,避免因文件读取带入多余字符导致解码失败
  • 如果解码后得到的data为nil,优先检查读取到的Base64字符串是否完整、是否存在被截断、混入非Base64字符的问题
  • 后续实现AES256 CBC加密时,需保证密钥长度为32字节(256位),初始化向量IV长度为16字节(与块大小匹配),避免参数错误导致加密结果异常

内容的提问来源于stack exchange,提问作者Kim Mỹ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:54:32