我正在尝试通过 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/