【问题标题】:Encrypt/Decrypt aes256cbc in Nodejs在 Nodejs 中加密/解密 aes256cbc
【发布时间】:2021-07-08 23:38:39
【问题描述】:

我正在开发一个项目,我需要在 nodejs 中开发一个加密/解密字符串。

我收到下一个格式的字符串:pTS3JQzTxrSbd+cLESXHpg==

这个字符串是从这个页面生成的:https://encode-decode.com/aes-256-cbc-encrypt-online/

并使用 aes-256-cbc 标准

我实现的代码是下一个:

var CryptoJS = require("crypto-js");

var key = 'TEST_KEY';
var text = 'pTS3JQzTxrSbd+cLESXHpg==';

function decript(text, key) {
    return CryptoJS.AES.decrypt(text.trim(), key);
}

console.log(decript(text, key).toString(CryptoJS.enc.Utf8));

但我总是得到一个空的回复。

你能告诉我有什么问题吗?

非常感谢!

【问题讨论】:

    标签: node.js encryption


    【解决方案1】:

    the documentation explainsI just answered yesterday 一样,CryptoJS.AES 在给定字符串“密钥”时将其视为密码并使用与openssl enc 兼容的基于密码的密钥派生。这与您链接的网站所做的不同且不兼容,这没有明确说明,但基于密码名称列表几乎可以肯定在内部调用 OpenSSL 的“EVP”接口,这意味着如果您也指定一个密钥算法的缩写,就像您所做的那样,它使用内存中发生的任何相邻的内容,这显然是零值字节(对于在 1980 年左右更新的操作系统上运行的程序来说并不罕见),并且它使用默认的 IV 零bytes 或类似地将其设置为零字节。对于 CBC,它使用 PKCS5/7 填充, 与 CryptoJS(以及大多数其他东西)兼容。因此:

    const CryptoJS = require('crypto-js');
    var key = CryptoJS.enc.Latin1.parse("TEST_KEY\0\0\0\0\0\0\0\0"+"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")
    var iv = CryptoJS.enc.Latin1.parse("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")
    var ctx = CryptoJS.enc.Base64.parse("pTS3JQzTxrSbd+cLESXHpg==")
    var enc = CryptoJS.lib.CipherParams.create({ciphertext:ctx})
    console.log( CryptoJS.AES.decrypt (enc,key,{iv:iv}) .toString(CryptoJS.enc.Utf8) )
    ->
    Test text
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-26
      • 2019-11-04
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2016-09-23
      相关资源
      最近更新 更多