nodejs加密解密有什么问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (44)

我有以下加密数据:

U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o

解密它的通行证是: password

在使用openssl的命令行中:

echo "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" | openssl enc -d -aes-256-cbc -a -k password

输出是:

Made with Gibberish\n

使用我的NodeJS应用程序:

  var decipher = crypto.createDecipher('aes-256-cbc', "password");
  var dec = decipher.update("U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o",
     'base64', 'utf8');
  dec += decipher.final('utf8');

我有以下错误TypeError: DecipherFinal faildecipher.final路线。

提问于
用户回答回答于

加密的数据以一个8字节的“magic”开始,表示有salt。然后接下来的8个字节是salt。现在,坏消息是:Node.js似乎并没有将salt用于EVP_BytesToKey方法:

int key_len = EVP_BytesToKey(cipher, EVP_md5(), NULL,
  (unsigned char*) key_buf, key_buf_len, 1, key, iv);

NULL是salt。

这已经使用Java测试应用程序(使用正确的salt)进行了验证 - 返回结果字符串。

请使用OpenSSL -nosalt开关排除salt,然后重试。

[例]

OpenSSL CLI:

openssl enc -aes-256-cbc -nosalt -a -k password
owlstead
Mh5yxIyZH+fSMTkSgkLa5w==

NodeJS加密:

var crypto=require('crypto') var cipher=crypto.createDecipher('aes-256-cbc', "password") var enc = cipher.update("Mh5yxIyZH+fSMTkSgkLa5w==", 'base64', 'utf8') enc += cipher.final('utf8') 最好使用非常独特的高熵密码,否则加密数据可能会有风险。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励