tripledes encryption not yielding same results in PHP and C#这个C#加密代码在NodeJS中看起来像什么?
public static string Encrypt(string toEncrypt, string key, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
}
else
keyArray = UTF8Encoding.UTF8.GetBytes(key);
TripleDESCryptoServiceProvider tdes
= new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
上述职位和代码有位漂亮的直线前进(或因此我认为)逻辑加密/用3DES和私钥解密的字符串。
我发现了几个例子,说明如何在nodejs中使用crypt库实现类似的东西,但是我迄今为止试过的所有东西都产生了垃圾(并且正确如此)。
想法?
UPDATE1:
这里是有点C#代码来生成我的工作数据:
String key = "abcdefghijklmnop";
String text = "12345";
String encrypted = Encrypt(text, key, false);
//Returns "QI3I65+aWSk="
而这里的的NodeJS代码,我正在同的最新版本:
var crypto = require('crypto');
var key = 'abcdefghijklmnop';
var encrypted = 'QI3I65+aWSk=';
var expected = '12345';
var algs = [ 'des3', 'des-ede', 'des-ede3', 'des-ecb', 'aes-128-ecb'];
for(var i in algs)
{
var decipher = crypto.createDecipher(algs[i], key);
var result = ''
result += decipher.update(encrypted, 'hex', 'binary');
result += decipher.final('binary');
console.log('Algorithm: ' + algs[i]
+ ', Matched Expected: ' + (result === expected));
}
..返回
Algorithm: des3, Matched Expected: false
Algorithm: des-ede, Matched Expected: false
Algorithm: des-ede3, Matched Expected: false
Algorithm: des-ecb, Matched Expected: false
Algorithm: aes-128-ecb, Matched Expected: false
我不清楚究竟使用哪种算法(我的列表在以前的尝试中显着更长),现在我确定要使用什么编码组合(二进制/十六进制)。
再次感谢。
UPDATE2: 复制加密方法从引用的帖子:
tripledes encryption not yielding same results in PHP and C#
可以ypu发布你的尝试。 – fent 2012-01-17 04:50:36
@DeaDEnD:我添加了几个样本来处理。希望这会给我们更多的工作。谢谢。 – user1153154 2012-01-17 08:25:13
更新了JavaScript代码,因为我试图清理干净的东西,删除了正确的“预期”,并将它用于加密输入和预期输出。该代码已更新,但显然它仍然无法正常工作。 – user1153154 2012-01-17 16:09:39