1
xxd -p
的第一個例子在以下示例中在十六進制的末尾添加了「0a」。不知道爲什麼,這就是爲什麼你看到我用在OpenSSL加密的第一個參數$1
,我已經手動生成的十六進制和插入它作爲這樣..nodejs中的三重DES與通過openssl進行比較
#!/bin/bash
KEY=`echo $1 |xxd -p`;
openssl enc -e -des-ede -nosalt -K $1 -iv "0000000000000000" -in $2 -out $3;
稱爲像這樣:
sh encrypt.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
)
這些爲什麼不相等?
也從nodejs中刪除了iv:'createCipheriv' =>'createCipher' – superhero
由於'createCipher()'*根據傳遞給它的密碼參數生成*(使用MD5)key,所以不應該改變它。既然你已經有了確切的關鍵,你應該像原來一樣使用'createCipheriv()'。 – mscdex
嘿謝謝m8 :) – superhero