Javascript 在CBC模式下使用aes js库解密时出现不支持的类似数组的对象错误
我正在使用库测试AES加密。当我试图解密密文时,我得到以下错误 错误:不支持类似数组的对象 在强制array(/data/data/com.suspendresume/files/nodejs project/node_modules/aes js/index.js:51:15) 以新的操作模式CBC(/data/data/com.suspendresume/files/nodejs project/node_modules/aes js/index.js:442:33) 在MyEmitter.rn_bridge.channel.on(/data/data/com.suspendresume/files/nodejs project/main.js:76:15) 在emitOne(events.js:115:13) 在MyEmitter.emit(events.js:210:7) 在Immediate.setImmediate[as _onImmediate](/data/data/com.suspendresume/files/nodejs-builtin_modules/rn bridge/index.js:14:13) 运行时回调(timers.js:781:20) 在tryOnImmediate(timers.js:743:5) 在processImmediate[as_immediateCallback](timers.js:714:5) 下面是我的代码Javascript 在CBC模式下使用aes js库解密时出现不支持的类似数组的对象错误,javascript,node.js,Javascript,Node.js,我正在使用库测试AES加密。当我试图解密密文时,我得到以下错误 错误:不支持类似数组的对象 在强制array(/data/data/com.suspendresume/files/nodejs project/node_modules/aes js/index.js:51:15) 以新的操作模式CBC(/data/data/com.suspendresume/files/nodejs project/node_modules/aes js/index.js:442:33) 在MyEmitter.
encryptedHex ='yRe2x6Gf2uVzfesp1I7ISkkAjTo2xoH2SPSqXzdWKHg+HhosYblfTFUJVoPVgpyf'
iv= 'ec8902010adc3d63';
key='aa54c24fae5e52a5861c80f466a90922'
key= aesjs.utils.hex.toBytes(key)
// When ready to decrypt the hex string, convert it back to bytes
var encryptedBytes = aesjs.utils.hex.toBytes(encryptedHex);
// The cipher-block chaining mode of operation maintains internal
// state, so to decrypt a new instance must be instantiated.
var aesCbc = new aesjs.ModeOfOperation.cbc(key, iv);
var decryptedBytes = aesCbc.decrypt(encryptedBytes);
// Convert our bytes back into text
var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes);
console.log(decryptedText);
请帮助我解决此问题您的代码存在一些问题:
encryptedHex
的变量不包含十六进制,但包含base64。十六进制仅允许数字和字母A-F,但字符串包含其他字母,甚至+
aesjs.utils.hex.toBytes将其转换为字节
Hello
:
encryptedB64='kcGz8P/m0lRRRxcT3tJiSw=';
iv='6162636465666768696a6b6c6d6e6f70';
iv=八角体(iv);
键='313233343536373839330313233343536';
key=aesjs.utils.hex.toBytes(key);
//准备解密base64字符串时,将其转换回字节
var encryptedBytes=Uint8Array.from(atob(encryptedB64),c=>c.charCodeAt(0));
//密码块链接操作模式保持内部
//状态,因此必须实例化一个新实例才能解密。
var aesCbc=新aesjs.操作模式.cbc(键,iv);
var decryptedBytes=aesCbc.decrypt(encryptedBytes);
//将字节转换回文本
var decryptedText=aesjs.utils.utf8.fromBytes(decryptedBytes);
console.log(decryptedText.trimEnd('\0'))代码>
您能解释一下您是如何加密Hello字符串的吗?@BharatModi使用给定的IV和密钥以及PKCS#7填充对文本“Hello”进行常规AES-128加密的。您可以使用任何加密工具和任何编程语言来实现这一点。我已经为您制作了一个小程序,因此您可以看到如何使用aesjs库来完成它。