我在使用
react-native-aes-crypto
库进行 AES-256-CTR 解密时遇到问题。解密在 Android 上完美运行,但在 iOS 上失败并出现错误 [Error: Decrypt failed]
。
以下是解密代码:
import Aes from 'react-native-aes-crypto';
export async function decryptAES_256_CTR(content, key, iv) {
const hexIV = base64ToHex(iv);
const hexKey = base64ToHex(key);
// Log converted values
console.log('Cipher (Base64):', content);
console.log('Key (Hex):', hexKey);
console.log('IV (Hex):', hexIV);
// Decrypt using AES
return await Aes.decrypt(content, hexKey, hexIV, 'aes-256-ctr');
}
function base64ToHex(base64) {
const raw = Buffer.from(base64, 'base64').toString('binary');
let result = '';
for (let i = 0; i < raw.length; i++) {
const hex = raw.charCodeAt(i).toString(16);
result += hex.length === 2 ? hex : '0' + hex;
}
return result.toUpperCase();
}
(NOBRIDGE) ERROR Error during decryption: [Error: Decrypt failed]
以下是发生错误时记录的输入:
Cipher (Base64): /j2YKMCrAsi00nN9lnshKwmIuHSHFteafgS0uWskhr0aw0152WPZPKKmNQthurxOO0rtHl8F84hlVg8YsqTAZ5enGKNk+XLKUi58c8H7rQO/Dedw8W3Pv6iHrZN/hLTBo1T4V8XP5sC+FP7NxHvTXrL8lfQ/dhWPYqZZ8hae12/Pwa1dNgL4B0hQaV0AdQySix9zRwCqrVUJXdoJizBcf3gvKl6+goMg5+KYLP+xJUSPCMiz01ocL2x2tipLxVo9FUjgnR2nj+OlTrZ99sWPTD8JkzRL77ge6G/wbCyzIU//JbR1Q+FfFCE+GcphMReH5dNiTR5g2XSeZo/GiVz+n+62xXMVySAs/0DJt4P62mnvE6LUkkAY/02wzvVb4jzuMP/R5KL2oZjuqPIfVvRrw/vp1Wj5/KwWKg6sBb0/z28StBn1qB5is/J61orO8yam2DowYFIZE+vZY3TCIlmoaFEviVW52yVWWGnWwa9AVxUYXUH4ZlbhBdGbO9+xrRhtx9RiU5cahMDOen/k2upiej7kBpXyPisPhPPQ1+K9no1D7/HBnawf+cs5UbOi28PmiS0h07nQd86dhKECFKOWzSaY1VNC0iAXRrG3BEzTzxgEjJmt/LCyl6YI+XpYX5BEXPq94hNYPgrhfVdK+uesnGsLT1XegIryzQzUWSoITpX9R8TwoO13HS0wv8Nu26Iuw3CJvbsGSEbG0glY4HRHwvwuSGIwvLo4Cc6QVCIqGhiSUITwMfd4KbCmLcO87qMc1fvyeeEE91A/3kNGY1AqubnJBqVu6eA2oxp3xdJ8HDKm8w1m0qF3sc/QZD/SnWPoaFBcAPV0mW0KG6XvyZpe9+CJUN4vPeoYs2iSYEkiy+n3L/yFo6tZIgvECQ856sjVjozTecEcyZhKPbpAfiKfWaub+VqcnoeAHLSpblnOGnaK7vtBGmzyfVw++Y0NrNhgSIO+IML+13puoxafVtb/aQ3t4+5Ey1n8Qw6ni9a/GJf0Ix7DK404mo7Bkb+YFJKeuOhb49QhMLzUGbeq5ieBAToiHH4Uz2j6Xrbmolp89Wa36EiVjAfkC15S9bEZWUm+H82cchfFwoHee/hmlzVfdzwDS6WQWyARxaBE048uESnFBAbA5PROobEXob73Q7rePWK4sCLY5P3Q/zTHQ0iF0xht7Bvlq7XnpjUqKjBL6cXqbW15gBDgvmIdZKUFCxfuWqaP4eRWVMwo++cq/P+ScIYELI0aHNJ7RfT9vWbElndQm1IgYQak56FiZ7ATp/MBii3xudE5UJ+wyNAvh58ye3DUoNT2SPfp+nA6JzTO7nAM6I3Kr79f3bIDfx2LP11xnYU4nyTE5LM0o7EpluG6sdIPcf4XpljKXxinJ5Dzb3P+kcyZm/ENmHnqyaH3pQT9
Key (Hex): 6B76F4CE1907991A845AB7523F8C1834E658CBF63A0214A589A2F4752BD19977
IV (Hex): 6333AFCC5354A014
decryptAES_256_CTR
功能。pod install
正确链接库。react-native-aes-crypto
进行 AES-256-CTR 解密是否存在任何已知问题?任何帮助或建议将不胜感激!
您使用的 IV 大小为 8 字节,但 AES 需要 16 字节 IV。
如果您将 0x00 值的 IV 扩展到 16 个字节,即如果您应用
0x6333AFCC5354A0140000000000000000
,则发布的数据解密成功,请参阅 CyberChef。作为修复,您应该尝试使用full 16 字节 IV(将来您应该从一开始就应用 16 字节 IV)。
需要指出的是 react-native-aes-crypto 库的一个特点:它使用 padding 来实现 CTR 模式 s。 这里。这是不必要的,因为流密码模式(例如 CTR)实际上不需要填充。只要你使用 react-native-aes-crypto 进行加密和解密,这并不重要。但是,一旦您使用 react-native-aes-crypto 加密并使用另一个库解密(反之亦然),就必须考虑到这一点。