openssl aes-128-cbc 用 nodejs 怎么写? nodejs 的 crypto 库 vi 只认 16 位额……

2021-02-08 19:20:59 +08:00
 lqzhgood
openssl enc -d -aes-128-cbc -in ./1qaz  -K bc1f89d3421a6f097262c348890a9acc  -out decrypted.jpg -iv bc1f89d3421a6f097262c348890a9acc  

我用 nodejs 这么写,一直报错 Invalid IV length 求教。。。。

样本文件下载地址 https://netcut.cn/nodejs

const crypto = require("crypto");
const key = "bc1f89d3421a6f097262c348890a9acc";
const iv = key;
const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);

const encryptedBytes = fs.readFileSync('./1qaz');
cipher.update(encryptedBytes);

const data = cipher.final('hex');

console.log('data', data);

2170 次点击
所在节点    Node.js
11 条回复
Mitt
2021-02-08 19:22:43 +08:00
128/8 = 16
lqzhgood
2021-02-08 19:24:40 +08:00
@Mitt openssl 是怎么把 32 位的 vi `bc1f89d3421a6f097262c348890a9acc` 处理成 16 位的呢。
Mitt
2021-02-08 19:24:53 +08:00
16 字节才是正确的,32 位是因为它是十六进制,你 hex2bin 就好了
Jirajine
2021-02-08 19:28:06 +08:00
显然 key 接受的类型是二进制数据,而不是字符串。
lqzhgood
2021-02-08 19:37:27 +08:00
lqzhgood
2021-02-08 19:49:21 +08:00
@Mitt 能再说清楚点么?
我把 key 写为 Buffer.from([
0xbc, 0x1f, 0x89, 0xd3, 0x42, 0x1a, 0x6f, 0x09, 0x72, 0x62, 0xc3, 0x48, 0x89, 0x0a, 0x9a, 0xcc,
])

还是无法解出~~
EPr2hh6LADQWqRVH
2021-02-08 20:03:35 +08:00
@lqzhgood Buffer.from('bc1f89d3421a6f097262c348890a9acc', 'hex'), 他俩类型都统一成 Buffer
Jirajine
2021-02-08 20:03:42 +08:00
> Both arguments must be 'utf8' encoded strings
这里的意思应该是指把 string 看作 utf8 encoded bytes, 而你这里显然不是。
改成 const cipher = crypto.createCipheriv('aes-128-cbc', Buffer.from(key,'hex'), Buffer.from(iv,'hex'));

只能说文档比较糟糕,缺乏例子且描述较为模糊。
lqzhgood
2021-02-08 20:27:20 +08:00
@avastms
@Jirajine
额, 解出来还是不对…… T.T
lqzhgood
2021-02-08 20:30:13 +08:00
@avastms
@Jirajine
额 是我错了。。。

createDecipheriv 写成 createCipheriv 了………………
从中午搞到现在 。。。 想死 。


还是谢谢各位了 。。。
xxcheng
2021-12-23 23:20:30 +08:00
太感谢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/752434

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX