Angular CryptoJs Encryption在Node JS CryptoJS中没有解密

这是我的Anguarjs守则

$httpProvider.defaults.headers.common['key'] = CryptoJS.AES.encrypt('<datatoencrypt>', '<key let says xyx>=', { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, keySize: '256 / 32' }); 

节点JS代码解密使用,algorithm如aes-256-cbc和key一样angular。

 app.all('*', function (req, res, next) { var headers = JSON.parse(JSON.stringify(req.headers)); var decipher = crypto.createDecipher(algorithm, key); decipher.setAutoPadding(true); var dec = decipher.update(headers.key, 'hex', 'utf8'); dec += decipher.final('utf8'); if (dec != "<datatoencrypt>") { //do something next(); } else { //do something next(); }}); 

我无法解密在angular度完成的encryption。 如果使用它们,它们都可以正常工作。 如果我解密string本身,它的工作是一样的节点。 但跨平台它不工作任何人都可以提出我的方法有什么问题。 任何帮助,将不胜感激。 我也尝试删除自动加载表单,以及缓冲区encryption/解密不工作。 提前致谢。

问题是节点密码库使用随机盐进行编码和解码,而encryption的cryptoJS则没有。 所以如果你想在节点中进行encryption和解密,你需要使用node-cryptojs-aes

 var CryptoJS = require('node-cryptojs-aes').CryptoJS; function decrypt(text) { try { var decrypted = CryptoJS.AES.decrypt(text, key); return decrypted.toString(CryptoJS.enc.Utf8); } catch (ex) { console.log(ex); }} 

密码必须相同,在angular码会去

 var encry = CryptoJS.AES.encrypt('<texttoecrypt>', <key>');