C#中Md5Hash是常用的哈希算法实现,基于MD5算法生成固定长度的哈希值,常用于数据校验、密码存储等场景,下面介绍具体的使用方法和实例。

C# Md5Hash基础用法
C#中可以通过System.Security.Cryptography命名空间下的MD5类实现Md5Hash计算,核心步骤是创建MD5实例、计算输入数据的哈希字节数组、将字节数组转换为十六进制字符串。
字符串Md5Hash计算实例
计算字符串的Md5Hash是最常用的场景,以下是完整的实现代码:
using System;
using System.Security.Cryptography;
using System.Text;
public class Md5Helper
{
// 计算字符串的Md5Hash,返回小写十六进制字符串
public static string GetStringMd5(string input)
{
if (string.IsNullOrEmpty(input))
{
return string.Empty;
}
// 创建MD5实例
using (MD5 md5 = MD5.Create())
{
// 将字符串转换为字节数组
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
// 计算哈希值
byte[] hashBytes = md5.ComputeHash(inputBytes);
// 将字节数组转换为十六进制字符串
StringBuilder sb = new StringBuilder();
foreach (byte b in hashBytes)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
}
}
// 调用示例
class Program
{
static void Main()
{
string testStr = "hello world";
string md5Result = Md5Helper.GetStringMd5(testStr);
Console.WriteLine($"字符串{testStr}的Md5Hash值为:{md5Result}");
}
}
文件Md5Hash计算实例
计算文件的Md5Hash可以用于校验文件完整性,避免文件被篡改,实现代码如下:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class FileMd5Helper
{
// 计算文件的Md5Hash,返回小写十六进制字符串
public static string GetFileMd5(string filePath)
{
if (!File.Exists(filePath))
{
throw new FileNotFoundException("文件不存在", filePath);
}
using (MD5 md5 = MD5.Create())
{
// 读取文件流
using (FileStream fs = File.OpenRead(filePath))
{
// 计算文件流的哈希值
byte[] hashBytes = md5.ComputeHash(fs);
StringBuilder sb = new StringBuilder();
foreach (byte b in hashBytes)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
}
}
}
// 调用示例
class Program
{
static void Main()
{
string filePath = "D:/test.txt";
try
{
string fileMd5 = FileMd5Helper.GetFileMd5(filePath);
Console.WriteLine($"文件{filePath}的Md5Hash值为:{fileMd5}");
}
catch (Exception ex)
{
Console.WriteLine($"计算文件Md5Hash失败:{ex.Message}");
}
}
}
Md5Hash使用注意事项
- MD5算法属于弱哈希算法,不建议用于高安全场景的密码存储,高安全场景建议使用bcrypt、scrypt等算法。
- 计算哈希时需要注意编码一致,字符串转字节数组时如果编码不同,得到的哈希值也会不同,通常推荐使用UTF8编码。
- MD5实例实现了
IDisposable接口,建议使用using语句包裹,避免资源泄漏。 - 哈希值是不可逆的,无法通过Md5Hash值反推原始数据。
常见问题解答
为什么不同工具计算的Md5Hash值不一样
通常是编码不一致导致的,比如有的工具使用GBK编码转换字符串,有的使用UTF8编码,只要统一编码方式,计算结果就会一致。
Md5Hash值的长度是固定的吗
是的,MD5算法生成的哈希字节数组长度固定为16字节,转换为十六进制字符串后长度为32位,不管输入数据长度是多少,输出的哈希字符串长度都不变。