gpt4 book ai didi

node.js - Nodejs 中的三重 DES 与通过 openssl 的比较

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:53 25 4
gpt4 key购买 nike

以下示例中 xxd -p 的拳头在十六进制末尾添加“0a”。不知道为什么,这就是为什么你注意到我在 openssl 加密中使用第一个参数 $1 ,我手动生成了十六进制并将其插入..

<小时/>
#!/bin/bash
KEY=`echo $1 |xxd -p`;
openssl enc -e -des-ede -nosalt -K $1 -iv "0000000000000000" -in $2 -out $3;

这样称呼:
sh 加密.sh 583645585458304c4f39524756514456 settings.conf settings.enc

<小时/>

在node.js中,我使用以下加密:

const key = Buffer.from('X6EXTX0LO9RGVQDV');

module.exports = (file, callback) =>
{
const
iv = new Buffer(0),
cipher = require('crypto').createCipheriv('des-ede', key, iv);

callback(null, cipher.update(file, 'utf8', 'binary'));
}

...并按如下方式触发:

require('fs').readFile(__dirname + '/settings.enc', (error, enc) =>
require('fs').readFile(__dirname + '/settings.conf', (error, conf) =>
require('./file-encrypt')(conf, (error, enc2) =>
{
enc2 = Buffer.from(enc2, 'binary');
console.log('compare: ', Buffer.compare(enc, enc2));
})));

但是输出永远不会是“0”(也就是说,它们永远不会相同 - 测试过:console.log('compare: ', Buffer.compare(enc2, enc2)) ofc 记录了一个漂亮的 0)

为什么它们不相等?

最佳答案

您错过了 cipher.final() 的电话提供所有纯文本数据后获取任何剩余字节。试试这个:

const crypto = require('crypto');
const key = Buffer.from('X6EXTX0LO9RGVQDV');

module.exports = (file, callback) =>
{
const iv = Buffer.alloc(0);
const cipher = crypto.createCipheriv('des-ede', key, iv);
callback(null, Buffer.concat([
cipher.update(file),
cipher.final()
]);
}

并使用类似:

require('fs').readFile(__dirname + '/settings.enc', (error, enc) =>
require('fs').readFile(__dirname + '/settings.conf', (error, conf) =>
require('./file-encrypt')(conf, (error, enc2) =>
{
console.log('compare: ', Buffer.compare(enc, enc2));
})));

此外,您可以省略 -iv "0000000000000000"来自openssl命令行,因为 des-ede 不使用 IV并避免在控制台上打印警告。

关于node.js - Nodejs 中的三重 DES 与通过 openssl 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com