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)
答案 0 :(得分:1)
可能这是由不匹配key-length引起的。三重DES期望密钥长度为128-bit
或192-bit
,具体取决于其KeySize设置。因此,您必须为16 bytes
提供128-bit
密钥,为24 bytes
提供192-bit
。
此处,您的错误显示您提供的Triple DES
密钥长度为22 bytes
:
密钥长度无效22
在任何一种情况下都不会被接受。
检查tripleDES.KeySize
。如果是128
,请确保hashKey
长度为16个字节,如果是192
,请确保hashKey
长度为24-bytes
。