计算MD5值返回“0”;0001.0E0F”;用于不同的字符串

本文关键字:用于 字符串 0E0F 0001 返回 MD5 计算 | 更新日期: 2023-09-27 18:20:22

我正在尝试获取两个不同列表的MD5哈希,这样我就可以很容易地判断列表是相同还是不同。然而,尽管这两个列表的内容不同,但我仍然得到了相同的MD5哈希。

哈希1:000102030405060708090A0B0C0D0E0F

哈希2: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变量在两个列表之间返回不同的数据,但该方法返回相同的字符串。

计算MD5值返回“0”;0001.0E0F”;用于不同的字符串

stringBuilder.Append(i.ToString("X2"));

这只是为您提供了您正在使用的数组索引i的十六进制值,这也是为什么您的MD5看起来如此。。。"计划"(从0x00到0x0f的序列号)。

你需要这样的东西:

stringBuilder.Append(data[i].ToString("X2"));

以获得位置CCD_ 3处的散列中的值。

000102030405060708090A0B0C0D0E0F

请注意这些数字是如何按顺序从00到0F的。

for (var i = 0; i < data.Length; i++)
{
    stringBuilder.Append(i.ToString("X2"));
}

您正在附加十六进制的i,它从00迭代到0F。data[i]可能工作得更好。