Unsupported array-like object error when decryption using aes-js library in CBC mode
我正在使用aes-js库来测试AES加密。当我尝试解密密文时,出现以下错误
Error: unsupported array-like object
at coerceArray (/data/data/com.suspendresume/files/nodejs-project/node_modules/aes-js/index.js:51:15)
at new ModeOfOperationCBC (/data/data/com.suspendresume/files/nodejs-project/node_modules/aes-js/index.js:442:33)
at MyEmitter.rn_bridge.channel.on (/data/data/com.suspendresume/files/nodejs-project/main.js:76:15)
at emitOne (events.js:115:13)
at MyEmitter.emit (events.js:210:7)
at Immediate.setImmediate [as _onImmediate] (/data/data/com.suspendresume/files/nodejs-builtin_modules/rn-bridge/index.js:14:13)
at runCallback (timers.js:781:20)
at tryOnImmediate (timers.js:743:5)
at processImmediate [as _immediateCallback] (timers.js:714:5)
以下是我的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); |
请帮助我解决此问题
您的代码存在一些问题:
我已经解决了以下问题:
这是结果。它应该在控制台中打印
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | encryptedB64 = 'kcGz8P/m0lRRRxcT3tJiSw=='; iv = '6162636465666768696a6b6c6d6e6f70'; iv = aesjs.utils.hex.toBytes(iv); key = '31323334353637383930313233343536'; key = aesjs.utils.hex.toBytes(key); // When ready to decrypt the base64 string, convert it back to bytes var encryptedBytes = Uint8Array.from(atob(encryptedB64), c => c.charCodeAt(0)); // 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.trimEnd('\\0')); |
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/aes-js/3.1.2/index.min.js"> |