Nodejs解密所需的AES256帮助

时间:2017-04-11 14:07:37

标签: node.js encryption salesforce

大家好,我想知道是否有人使用nodejs使用aes256进行解密。

加密字符串是base64编码的,前16个字节是IV。

我正在尝试提取下面的IV,但遇到问题:

$ awk '($9 ~ /^1$|^3$|^5$/) {print $0}' file 

我一直得到"无效的IV长度"错误。

1 个答案:

答案 0 :(得分:0)

我相信问题是您的keybase64中,而createDecipheriv在期望其他类型。

来自the docs

  

key是算法使用的原始密钥,iv是初始化向量。两个参数都必须是'utf8'编码的字符串,BuffersTypedArrayDataViews。如果密码不需要初始化向量,则iv可以为null。

此外,从加密的数据中,您首先从前16个字节中获取IV,然后解密其余的数据。

这是我认为您需要的,尽管结果有些混乱:

const crypto = require('crypto');

const decrypt = (textBase64, keyBase64, ivBase64) => {
    const algorithm = 'aes-256-cbc';
    const ivBuffer = Buffer.from(ivBase64, 'base64');
    const keyBuffer = Buffer.from(keyBase64, 'base64');

    const decipher = crypto.createDecipheriv(algorithm, keyBuffer, ivBuffer);
    decipher.setAutoPadding(false);

    let decrypted = decipher.update(textBase64, 'base64', 'utf8');
    decrypted += decipher.final('utf8');
    return decrypted;
}

const encryptedMessage = 'mIBOVqk3bDCQPupFcIWNReXrdNRnb2P+iKl35yYRgbA=';
const key = '6IAVE+56U5t7USZhb+9wCcqrTyJHqAu09j0t6fBngNo=';
const iv = Buffer.from(encryptedMessage, 'base64').slice(0, 16);

// the message comes from the bytes AFTER the IV - this is what you should decrypt
const message = Buffer.from(encryptedMessage, 'base64').slice(16);

const result = decrypt(message, key, iv);
console.log(result);

结果是:

I AM CONFUSED╚╚╚