【发布时间】:2016-03-02 07:14:01
【问题描述】:
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)
【问题讨论】:
-
好吧,在 node.js 中使用 SHA-1 之前,您似乎忘记对“密钥”进行哈希处理。
-
此外,不要忘记将随机 IV 从 C# 传输到 node.js。
-
传输随机 IV 是什么意思?
-
@ArtjomB。在我使用哈希后,它可以工作,但加密的输出与 c# 代码不同。 node.js: eiw7XmQOYGo= c#: i14HzuoyWokHK1VwzkI1ZQ==
-
如果你使用
TripleDESCryptoServiceProvider,默认是CBC模式,需要IV,自动随机生成。您必须在解密期间使用相同的 IV,因此您必须将其与密文一起传输。此外,node.js 中的DES-EDE3可能使用 ECB 模式而不是 CBC 模式,您必须使用DES-EDE3-CBC
标签: c# node.js encryption cryptography tripledes