密钥长度node.js无效的三重DES加密

时间:2016-03-02 07:14:02

标签: c# node.js encryption cryptography tripledes

var tripleDES = new TripleDESCryptoServiceProvider();
var sha1 = new SHA1CryptoServiceProvider();

var keyBytes = System.Text.Encoding.Unicode.GetBytes(key);
var hashKey = sha1.ComputeHash(keyBytes);
System.Array.Resize(ref hashKey, ((tripleDES.KeySize / 8)));
tripleDES.Key = hashKey;

我是node.js的新手,我正在尝试将加密从c#切换到node.js,但是下面的Invalid key length 22错误是node.js代码。

var text = "test";
var des_key = new Buffer("abcdefghijklmnopqrstuv",'utf8');
var des_iv = new Buffer(0);

var des_decryption = crypto.createCipheriv("DES-EDE3", des_key, des_iv);
var test = des_decryption.update(text,'utf8','base64');
test+=des_decryption.final('base64')
console.log("test:"+test)

我已编辑下面的代码以显示正确的代码

var text = "test";
var des_key = new Buffer("abcdefghijklmnopqrstuv",'base64');
var des_iv = new Buffer(IV,'base64');

var des_decryption = crypto.createCipheriv("DES-EDE3-CBC", des_key, des_iv);
var test = des_decryption.update(text,'ucs2','base64'); //ucs2 is the same as utf16
test+=des_decryption.final('base64')
console.log("test:"+test)

1 个答案:

答案 0 :(得分:1)

可能这是由不匹配key-length引起的。三重DES期望密钥长度为128-bit192-bit,具体取决于其KeySize设置。因此,您必须为16 bytes提供128-bit密钥,为24 bytes提供192-bit

此处,您的错误显示您提供的Triple DES密钥长度为22 bytes

  

密钥长度无效22

在任何一种情况下都不会被接受。

检查tripleDES.KeySize。如果是128,请确保hashKey长度为16个字节,如果是192,请确保hashKey长度为24-bytes