C#MD5哈希需要匹配PHP MD5哈希(带salt)
本文关键字:哈希 salt MD5 PHP 哈希需 C#MD5 | 更新日期: 2023-09-27 18:29:02
我有一个字符串需要在C#中使用salt进行哈希处理,并与PHP中的字符串相匹配。C#代码如下:
string stringToHash = "123";
string saltToUse = "321";
byte[] stringBytes = ASCIIEncoding.ASCII.GetBytes(stringToHash);
byte[] saltBytes = ASCIIEncoding.ASCII.GetBytes(saltToUse);
var hmacMD5 = new HMACMD5(saltBytes);
var saltedHash = hmacMD5.ComputeHash(stringBytes);
byte[] hashedBytesNoSalt = MD5CryptoServiceProvider.Create().ComputeHash(stringBytes);
string hashedString = BitConverter.ToString(hashedBytesNoSalt).Replace("-", "").ToLower();
string saltedString = BitConverter.ToString(saltedHash).Replace("-", "").ToLower();
测试C#是否正确输出的PHP代码是:
<?php echo md5('123'.'321'); ?>
C#输出正确的UNSALTED MD5散列,即202cb962ac59075b964b07152d234b70。然而,当我尝试使用C#进行salt时,我得到900011ae860f471561023fba6cc25df6,而使用PHP,我得到c8837b23ff8aaa8a2dde915473ce0991。
我不知道它为什么要这样做,或者这是否是正确的方式。需要记住的是C#需要输出到PHP的输出。
C#代码使用了比PHP代码更好的salting机制。为了匹配PHP,您所需要做的就是在stringToHash + saltToUse
上运行MD5,而不是使用HMACMD5的关键功能。简言之,按照您在C#中生成无盐MD5所做的操作,但传入stringToHash + saltToUse
。
salt与私钥不是一回事。HMACMD5
使用私钥,而您所需要的只是一个加盐的MD5散列。只需将salt附加到字符串即可生成正确的密钥。。。stringToHash + saltToUse
。
点击此处了解HMACMD5
:http://msdn.microsoft.com/en-us/library/yd9e7dt2.aspx