繁体   English   中英

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

[英]How do I correctly encrypt a string using aes-256-ecb in NodeJS and decrypt with OpenSSL's command line?

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

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM