gpt4 book ai didi

c# - 计算 MD5 值对于不同的字符串返回 "0001..0E0F"

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:21 30 4
gpt4 key购买 nike

我正在尝试获取两个不同列表的 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 变量确实在两个列表之间返回不同的数据,但该方法返回相同的字符串。

最佳答案

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

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

你需要这样的东西:

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

在位置 i 处获取哈希中的

关于c# - 计算 MD5 值对于不同的字符串返回 "0001..0E0F",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25635324/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com