我試圖獲得兩個不同列表的MD5哈希值,因此我可以很容易地判斷列表是相同還是不同。但是,即使它們具有不同的內容,我仍然爲這兩個列表獲得相同的MD5哈希值。對於不同的字符串計算MD5值返回「0001..0E0F」
HASH1:000102030405060708090A0B0C0D0E0F
HASH2:000102030405060708090A0B0C0D0E0F
他們應該是不同的,因爲列表中的內容是不同的,對不對?
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
namespace ConsoleApplication5
{
class Program
{
static void Main()
{
var md5Hash = MD5.Create();
var list1 = new List<string> { "1", "dog", "cat", "mouse" };
var list2 = new List<string> { "2", "dog", "cat", "mouse"};
var md5 = new Md5Hash();
var joined1 = string.Join(",", list1.ToArray());
var joined2 = string.Join(",", list2.ToArray());
var hash1 = md5.GetMd5Hash(md5Hash, joined1);
Console.WriteLine("hash 1: {0}", hash1);
var hash2 = md5.GetMd5Hash(md5Hash, joined2);
Console.WriteLine("hash 2: {0}", hash2);
Console.ReadKey();
}
}
}
我懷疑問題是與正在生成Md5hash方法...
internal string GetMd5Hash(HashAlgorithm md5Hash, string input)
{
// Convert the input string to a byte array and compute the hash.
var data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
// Create a new Stringbuilder to collect the bytes
// and create a string.
var stringBuilder = new StringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (var i = 0; i < data.Length; i++)
{
stringBuilder.Append(i.ToString("X2"));
}
// Return the hexadecimal string.
return stringBuilder.ToString();
}
的var data
變量並在兩個列表中返回不同的數據,但該方法返回相同的字符串。