下面的示例代码在node.js中使用aes-256-cbc算法、固定key和node.js中的iv生成加密值。
const crypto = require('crypto');
const iv = '0f9387b3f94bf06f';
const key = 'ZTk0YTU5YjNhMjk4NGI3NmIxNWExNzdi';
const encrypt = (value) => {
const cipher = crypto.createCipheriv('AES-256-CBC', key, iv);
let encrypted = cipher.update(value, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
};
console.log('Encrypted value: ', encrypt('HelloWorld'));上面的脚本创建的加密值(加密的字符串HelloWorld )是以下hex值:
0c491f8c5256b9744550688fc54926e8
在bash中,使用openssl,我可以使用上面给定的加密值执行什么脚本来给出解密的HeloWorld值
我在这方面花了很多时间,使用openssl、各种选项和附带的命令,但我很难生成相同的输出。
有谁能帮上忙吗?
发布于 2018-03-21 13:19:02
根据Node.js文档的说法,函数crypto.createCipher()不使用salt。然后,您需要显式地将它告诉openssl。
此外,您使用的函数不需要IV,如果需要IV,则使用crypto.createCipheriv()。
因此,openssl命令如下:
$ echo dd64232d380669d1a09378e1dc9de762 | xxd -ps -r | openssl enc -d -aes-256-cbc -k ZTk0YTU5YjNhMjk4NGI3NmIxNWExNzdi -nosalt
HelloWorld注意,我使用xxd将字符串转换为字节。你可以用hexdump,od或者其他..。
为了响应上一次OP的更改,这里使用正确的openssl命令。显然,如果显式指定IV,则不需要salt,也不需要字节格式的键(选项-K)
echo 0c491f8c5256b9744550688fc54926e8 | xxd -ps -r | openssl enc -d -aes-256-cbc -iv 30663933383762336639346266303666 -K 5a546b3059545535596a4e684d6a6b344e4749334e6d49784e5745784e7a6469https://stackoverflow.com/questions/49406074
复制相似问题