我有一个字符串,需要在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#输出正确的未咸MD5散列,即202cb962ac59075b964b07152d234b70。但是,当我尝试使用C#进行食盐时,我得到了900011ae860f471561023fba6cc25df6,而使用c8837b23ff8aaa8a2dde915473ce0991我得到了c8837b23ff8aaa8a2dde915473ce0991。
我不知道它为什么要这样做,也不知道这是否正确。需要记住的是,C#需要输出到PHP输出的内容。
发布于 2013-08-26 19:15:22
盐和私钥不是一回事。HMACMD5使用私钥,当您只想要一个咸的MD5散列时。只需将盐附加到字符串以生成正确的密钥..。stringToHash + saltToUse。
在这里阅读HMACMD5:http://msdn.microsoft.com/en-us/library/yd9e7dt2.aspx
发布于 2013-08-26 19:12:10
C#代码使用了比PHP更好的咸化机制。要匹配PHP,只需在MD5上运行stringToHash + saltToUse,而不是使用HMACMD5 5的关键特性。简而言之,完全按照您在C#中生成未腌制的C#所做的那样做,而是传递给stringToHash + saltToUse。
https://stackoverflow.com/questions/18451182
复制相似问题