这是我的 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'
});
Node JS 代码解密使用,算法为 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 完成的加密。如果单独使用它们都可以很好地工作。如果我解密 Angular 本身的字符串,它的工作原理与 Node 相同。但是跨平台它不起作用任何人都可以建议我的方法有什么问题。任何帮助,将不胜感激。 我也尝试从两侧删除自动填充,缓冲区加密/解密也不起作用。 提前致谢。
最佳答案
问题是 Node 加密库使用随机盐进行编码和解码,而 augular cryptoJS 则不然。因此,如果您想在 Angular 中加密并在 Node 中解密,您需要使用 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);
}}
两者的 key 必须相同,在 Angular 代码中将像
var encry = CryptoJS.AES.encrypt('<texttoecrypt>', <key>');
关于angularjs - Node JS 中的 Angular CryptoJs 加密而不是解密 CryptoJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47466845/