首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解密openssl中的node.js aes-256-cbc字符串。

解密openssl中的node.js aes-256-cbc字符串。
EN

Stack Overflow用户
提问于 2018-03-21 12:12:42
回答 1查看 1.8K关注 0票数 1

下面的示例代码在node.js中使用aes-256-cbc算法、固定key和node.js中的iv生成加密值。

代码语言:javascript
复制
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、各种选项和附带的命令,但我很难生成相同的输出。

有谁能帮上忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-21 13:19:02

根据Node.js文档的说法,函数crypto.createCipher()不使用salt。然后,您需要显式地将它告诉openssl

此外,您使用的函数不需要IV,如果需要IV,则使用crypto.createCipheriv()

因此,openssl命令如下:

代码语言:javascript
复制
$ echo dd64232d380669d1a09378e1dc9de762 | xxd -ps -r | openssl enc -d -aes-256-cbc -k ZTk0YTU5YjNhMjk4NGI3NmIxNWExNzdi -nosalt
HelloWorld

注意,我使用xxd将字符串转换为字节。你可以用hexdumpod或者其他..。

为了响应上一次OP的更改,这里使用正确的openssl命令。显然,如果显式指定IV,则不需要salt,也不需要字节格式的键(选项-K)

代码语言:javascript
复制
echo 0c491f8c5256b9744550688fc54926e8 | xxd -ps -r | openssl enc -d -aes-256-cbc -iv 30663933383762336639346266303666 -K 5a546b3059545535596a4e684d6a6b344e4749334e6d49784e5745784e7a6469
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49406074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档