cryptojs TDES转换为OPENSSL

问题描述 投票:1回答:1

我在nodejs中编写此代码,以便使用459508BB6B65C5A304D3EFB133038A14解密TripleDES

C = require("crypto-js");
text = C.enc.Hex.parse("459508BB6B65C5A304D3EFB133038A14");
key = C.enc.Hex.parse("90033E3984CEF5A659C44BBB47299B4208374FB5DC495C96");
iv = C.enc.Hex.parse("E6B9AFA7A282A0CA");

var d = C.TripleDES.decrypt(
    {
        ciphertext: text
    }, 
        key,
    {
        iv: iv,
        mode: C.mode.CBC
    }
);
var r = d.toString(C.enc.Utf8);
console.log(r);

现在我想在命令行中使用OpenSSL对此进行解密。我尝试此命令但不起作用:

echo -n 459508BB6B65C5A304D3EFB133038A14 | openssl enc -des3 -d -K 90033E3984CEF5A659C44BBB47299B4208374FB5DC495C96 -iv E6B9AFA7A282A0CA -nopad 

此命令不起作用,并返回错误的解密文本

javascript openssl cryptojs 3des
1个回答
2
投票

您忘了对密文本身进行十六进制解码,请尝试:

echo -n 459508BB6B65C5A304D3EFB133038A14 | xxd -p -r | openssl enc -des3 -d -K 90033E3984CEF5A659C44BBB47299B4208374FB5DC495C96 -iv E6B9AFA7A282A0CA

这里xxd使用以下命令执行十六进制解码:

-p | -ps | -postscript | -plain
     output in postscript continuous hexdump style. Also known as plain hexdump style.
-r
     reverse operation: convert (or patch) hexdump into binary.

然后打印出12个字符,并在末尾包含一个空格字符:

1 0 6 4 0 3 

注意,我也删除了-nopad,因为它不再需要; crypto-js使用OpenSSL兼容的填充(好吧,openssl兼容everything实际上)。

© www.soinside.com 2019 - 2024. All rights reserved.