我有一個字符串,需要在C#中使用鹽進行散列並匹配它在PHP中的內容。 C#代碼如下:C#MD5散列需要匹配PHP MD5哈希(與鹽)
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();
PHP代碼以測試是否C#正在輸出正確地是:
<?php echo md5('123'.'321'); ?>
的C#輸出了正確的無鹽MD5哈希,這是202cb962ac59075b964b07152d234b70。但是,當我嘗試使用C#進行鹽化時,我得到了900011ae860f471561023fba6cc25df6和PHP,我得到了c8837b23ff8aaa8a2dde915473ce0991。
我不知道它爲什麼這樣做,或者如果這是正確的方法。需要記住的是C#需要輸出到PHP輸出的內容。
byte [] stringBytes = ASCIIEncoding.ASCII.GetBytes(stringToHash + saltToUse); 做到了這一點,它完美的作品,謝謝! – MathMan08
雖然它不適用於複雜的鹽。 :| – MathMan08
你能解釋它是如何不起作用的嗎?也許開一個新的問題? – Haney