我试图获得两个不同列表的MD5哈希,以便我可以轻松判断列表是相同还是不同.但是,即使它们具有不同的内容,我仍然为两个列表获得相同的MD5哈希值.
哈希1: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{ "1", "dog", "cat", "mouse" }; var list2 = new List { "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
变量确实在两个列表之间返回不同的数据,但该方法返回相同的字符串.