各位同学,手上有一段C#代码,希望转为NodeJS的。参考了
private static void Decode(string text)
{
MemoryStream memoryStream = new MemoryStream();
RijndaelManaged rijndaelManaged = new RijndaelManaged();
byte[] array = Convert.FromBase64String(text);
byte[] rgbKey = Convert.FromBase64String("RTgklqOuVBZ=");
byte[] rgbIV = Convert.FromBase64String("3FH9eyHK7mfgtwF81RIwgA==");
CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndaelManaged.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cryptoStream.Write(array, 0, array.Length);
cryptoStream.Close();
memoryStream.Close();
Console.WriteLine("解密后:");
Console.WriteLine(Encoding.UTF8.GetString(memoryStream.ToArray()));
Console.WriteLine();
}
我的代码如下:
var crypto = require('crypto');
var algorithm = 'aes-128-ecb';
var key = 'RTgklqOuVBZ=';
var iv = '3FH9eyHK7mfgtwF81RIwgA==';
var decipher = crypto.createDecipheriv(algorithm, key,iv);
var data = 'hidden the coded string '
decipher.update(data, 'base64', 'utf8');
var decoded = decipher.final('utf8');
console.log(decoded);
但是在crypto.createDecipheriv(algorithm, key,iv);时,报错,Invalid IV length 。 试了:var iv = new Buffer('3FH9eyHK7mfgtwF81RIwgA==','base64'); 也还是报同样的错误,请教一下,是哪里没有设置对?
哪位同学能帮忙搞定,请留下解决方案,愿发50元红包感谢!【已发给@jiangzhuo49.9】
更新: 问题稍微有些复杂,下面是C#在线代码,根本跑不通。 http://www.shucunwang.com/RunCode/csharp/#id/05e22719679f314a9cf729388895fd5d 下面是我用VisualC# 2010 Express版本跑的,可以跑通。 http://note.youdao.com/noteshare?id=6a43445e6c781eba014d0c1ebc6d6e9c 按照@jiangzhuo的办法,也是提醒key太短了,虽然没解决,但是@jiangzhuo提供了大概的问题所在,所以给@jiangzhuo发了49.9的红包。 希望是纯js模块的。
也许@welchwsy提供的crypto-js有效?,我实在研究不明白,还请大家帮忙: 提供代码(非样例代码,而是真的用代码中的key和iv),用纯JS模块(非本地模块),通过测试,将加密过的+hWYuvicr6++J4/DYwf5lw==还原为hello 哪位同学能帮忙搞定,请留下解决方案,愿发100元红包感谢!