AES加解密异常:后端加密数据前端解密后不完整求助
问题解决:Swift端AES解密数据不完整
核心问题:IV(初始化向量)不匹配
Java后端使用的是全0的16字节IV:
byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
但Swift前端的IV最后一位是0x0E,与后端完全不一致:
let iv: [UInt8] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0E]
AES-CBC模式下,初始化向量必须前后端完全一致,否则会导致解密出的数据开头部分错乱或截断。
修复步骤
将Swift代码中的IV改为全0数组:
let iv: [UInt8] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
额外验证点
- 盐值一致性:确保Swift中
EncryptionKeys.saltKeyLoEncryption的值与Java的SALT完全相同:"t-*(b.:#H$[)7Mp&*@E]"`,包括所有特殊字符和大小写。 - PBKDF2参数匹配:当前代码中迭代次数(10000)、密钥长度(16字节=128位)、哈希算法(SHA256)均与Java端一致,无需调整。
修复后预期结果
修改IV后,解密后端提供的加密字符串61VkIxCEBJJ46QF6VPwpXg==,应得到完整的明文Hello World!。
内容的提问来源于stack exchange,提问作者Aadesh Maheshwari
相关产品推荐
相关产品推荐

