我遇到了以下代碼的一個奇怪的問題,下面的代碼假設在一次迭代後停止,但它只是繼續前進。但是,如果我刪除了最後一個「result_bytes = md5.ComputeHash(orig_bytes);」那麼它會工作。有沒有人以前面臨類似的問題?MD5哈希的怪異行爲
MD5 md5;
byte[] orig_bytes;
byte[] result_bytes;
Dictionary<byte[], string> hashes = new Dictionary<byte[], string>();
string input = "NEW YORK";
result_bytes = UnicodeEncoding.Default.GetBytes("HELLO");
while (!hashes.ContainsKey(result_bytes))
{
md5 = new MD5CryptoServiceProvider();
orig_bytes = UnicodeEncoding.Default.GetBytes(input);
result_bytes = md5.ComputeHash(orig_bytes);
hashes.Add(result_bytes, input);
Console.WriteLine(BitConverter.ToString(result_bytes));
Console.WriteLine(hashes.ContainsKey(result_bytes));
result_bytes = md5.ComputeHash(orig_bytes);
}
感謝您的答覆,但他們都做同樣的thing result_bytes = md5.ComputeHash(orig_bytes);這只是我實際邏輯的一個快照,因爲我需要重新計算,但是奇怪的是爲什麼同一個命令會給出不同的結果呢? orig_bytes根本沒有改變,斷點顯示字節[]內容相同 – cherhan 2010-10-14 06:42:30
雖然兩個數組中的字節相同,但是每次調用ComputeHash時,都會得到一個帶有不同引用和不同GetHashCode()值的新字節數組, Dictionary用它來比較它的鍵。 (byte []是一個引用類型,每個新對象在默認情況下被認爲是不同的,不管內容是什麼) – user472157 2010-10-14 06:46:17