【问题标题】:Angular CryptoJs Encryption Not Decryption in Node JS CryptoJSNode JS CryptoJS中的Angular CryptoJs加密不解密
【发布时间】:2017-11-24 05:25:30
【问题描述】:

这是我的 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,密钥与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 本身的字符串,它的工作原理与节点相同。但是跨平台它不起作用,任何人都可以提出我的方法有什么问题。任何帮助,将不胜感激。 我也尝试过从两边删除自动填充,缓冲区加密/解密也不起作用。 提前致谢。

【问题讨论】:

    标签: angularjs node.js encryption cryptography cryptojs


    【解决方案1】:

    问题是节点加密库使用随机盐进行编码和解码,augular cryptoJS 没有。因此,如果您想以角度加密并在节点中解密,您需要使用 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);
    }}
    

    两者的键必须相同,在角度代码中会像

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

    【讨论】:

      猜你喜欢
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 2015-08-27
      相关资源
      最近更新 更多