【发布时间】:2020-11-23 05:29:41
【问题描述】:
我正在使用“cypto-js”在浏览器中使用高级加密标准 (AES) 对字符串进行加密,并且需要在服务器上使用节点“crypto”对其进行解密。
我可以单独使用“crypto-js”进行加密/解密,但是当我尝试使用“crypto.createDecipher”使用“crypto”(节点)进行解密时,我会收到“错误解密”的错误消息或'错误的块大小'取决于我的尝试。
例如:只使用 'crypto-js' - 工作正常
crypto-js
const cypherParams = CryptoJS.AES.encrypt('my message', 'passphrase')
const decrypted = CryptoJS.AES.decrypt(cypherParams, 'passphrase')
console.log(decrypted.toString(CryptoJS.enc.Utf8)) // 'my message' - works!
例如:使用 'crypto-js' 编码 使用 'crypto' 解码 - 导致错误
[client]
const cypherParams = CryptoJS.AES.encrypt('my message', 'passphrase')
[server]
const decipher = crypto.createDecipher('aes-256-cbc', 'passphrase');
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
// results in 'bad decrypt' or 'block size' error in console
console.log(decrypted); // this never executes
我试过了:
- 将解密中的加密算法更改为 192 或其他(但“crypto-js”文档说默认为“256”是使用密码短语
- 客户端上的 base64 编码。也尝试了十六进制编码
例如:
const cypherParams = CryptoJS.AES.encrypt('my message', 'passphrase')
const base64Encoded = cipherParams.toString(CryptoJS.enc.Base64)
and
const cypherParams = CryptoJS.AES.encrypt('my message', 'passphrase')
const cypherParams.ciphertext = cipherParams.toString(CryptoJS.enc.Base64)
- 我使用的是“crypto.createDecipher”而不是“crypto.createDecipheriv”,因为我在这个项目中使用 Node v8.12.0 时遇到了问题
我想就是这样...感谢任何帮助或提示!
【问题讨论】:
标签: javascript encryption aes cryptojs node-crypto