javascript - 如何在 NodeJS 中使用 aes-256-ecb 正确加密字符串并使用 OpenSSL 命令行解密?

标签 javascript node.js encryption cryptography aes

我正在尝试通过 node.js 的内置加密库使用 aes-256-ecb 密码来加密长 UTF-8 编码字符串。下面是我在node.js(v0.10.24)中测试的加密代码以及OpenSSL(OpenSSL 1.0.1 14 Mar 2012)命令行的相应输出和解密命令。

使用node.js加密

var crypto = require('crypto');
var cipher = crypto.createCipher('aes-256-ecb','password');
var plaintext = [ 
  'this is a very long long long long long long',
  'long long long long long long long long long',
  'long long long long long long string!!!!!!!!'
].join('')
console.log(cipher.update(plaintext,'utf8', 'base64') + cipher.final('base64'))

输出

XBnU6WZ9wr2GdA1YWZVhsG+mHQ0xlXXc8rAFEud6I/PqfFZL6Pdit7Sm8v+ViKNZmhgTzi7zfg8GHKFntkCDuj6F54TDaWKAdJRftLP9I+22jiKRvYtpD4SDV2oIy93MM5IMbSoBRvXayNF8H9FQnhACM5MHhHX1pLiR4yCg/l6iHH2BDLrwCSifGcGCaQYx

使用 OpenSSL 解密

echo -n 'XBnU6WZ9wr2GdA1YWZVhsG+mHQ0xlXXc8rAFEud6I/PqfFZL6Pdit7Sm8v+ViKNZmhgTzi7zfg8GHKFntkCDuj6F54TDaWKAdJRftLP9I+22jiKRvYtpD4SDV2oIy93MM5IMbSoBRvXayNF8H9FQnhACM5MHhHX1pLiR4yCg/l6iHH2BDLrwCSifGcGCaQYx' | openssl enc -d -aes-256-ecb -nosalt -a -pass pass:password

输出

bad decrypt
3074361544:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:evp_enc.c:532:

哪一个是错误的;我的加密或解密?我怎样才能使它们相互兼容?

最佳答案

在 openssl 命令中,您应该使用 -A 选项来以 Base64 方式处理一行数据。

openssl enc -d -aes-256-ecb -nosalt -a -A -pass pass:password

关于javascript - 如何在 NodeJS 中使用 aes-256-ecb 正确加密字符串并使用 OpenSSL 命令行解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20973491/

相关文章:

sql - RSConfig 生成 Dsn 连接字符串不起作用

javascript - Jquery Splitter bar 100%面板高度

javascript - react JS : Check Email Id is valid or not along with comma separated email id

node.js - 无法从EC2访问具有IAM角色的S3文件

Node.js 和 Require.js 包含整个目录

python-3.x - 如何在Python 3中使用RSA或类似的加密?

javascript - 通过 javascript AJAX 发送 Java 对象

javascript - 更改 JavaScript 中的基数

node.js - 使用 ember new 时 EPROTO : protocol error, 符号链接(symbolic link) '../semver/bin/semver'

java - 请帮助我了解 java1.8 与安全功能的向后兼容性