我有一个字符串需要在 C# 中使用盐进行散列并匹配它在 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# 加盐时,我得到 900011ae860f471561023fba6cc25df6,而使用 PHP 我得到 c8837b23ff8aaa8a2dde915473ce0991。
我不确定它为什么这样做,或者这是否是正确的方法。要记住的是 C# 需要输出到 PHP 输出的内容。