在 C# 中从字哈希值符串计算 MD5 哈希值
散列算法
是用于将任意输入数据映射到固定大小散列的数学算法。它们用于多种用途,例如将数据存储在哈希值映射
、密码验证
、消息消化
和加密货币安全
等数据结构中。
MD5
属于散列算法的消息摘要类。Rivest 开发了 MD5
和其他算法,如 MD2
、MD4
等。
该算法最初设计用于验证数字签名。但后来,发现了许多导致其弃用的漏洞。
尽管如此,它仍然用于数据完整性验证,并为理解高级算法奠定了基础。MD5
算法与所有消息消化算法一样,将未知长度的消息作为输入,并将其转换为固定大小的散列。
对输入字符串的微小更改将导致完全不同的哈希值。本文将学习如何使用 C#
计算 MD5
哈希值。
在 C#
中使用 MD5
算法
MD5 算法包括以下四个主要步骤:
首先,添加填充位。
在这一步中,我们添加填充位,使总位数变为 64
,小于最接近的 512
倍数。这样做是为了使算法可以处理 512
位大小的数据,步长 2
,以 64
位表示的字符串长度相加得到 512
的偶数倍。
第二,添加长度位。
以 64
位计算字符串的长度。将它们附加到步骤 1
中形成的输出。
第三,初始化 MD 缓冲区。
我们初始化了 4
个消息摘要缓冲区,其名称为 A
、B
、C
和 D
的 32
位。它们如下:
A = 01 23 45 67
B = 89 ab cd ef
C = fe dc ba 98
D = 76 54 32 10
第四是单个 512
位块的处理。
整个位被分成大小为 512
的块。形成的每个块被分成 16
个 32
位的子块。形成的所有 16
块通过一系列 4
操作与缓冲区 A
、B
、C
和 D
传递以给出最终散列。
使用 System.Security.Cryptography
库从 C# 字符串计算 MD5 哈希值
using System;
using System.Security.Cryptography;
using System.Text;
public class Test {
public static string ComputeMd5Hash(string message) {
using (MD5 md5 = MD5.Create()) {
byte[] input = Encoding.ASCII.GetBytes(message);
byte[] hash = md5.ComputeHash(input);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++) {
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
}
public static void Main() {
string message = "Welcome to DelfStack";
Console.WriteLine(ComputeMd5Hash(message));
}
}
输出:
53C62733BB54F2B720A32490E6C447FF
在上面的程序中,我们创建了一个存在于 C#
中的 MD5
类的对象,它通过 ComputeHash()
方法提供 md5
算法的现成实现。
我们将消息字符串转换为字节流
以匹配 ComputeHash()
方法的函数签名,然后以字节流
的形式返回结果。然后,我们使用字符串生成器类将字节流转换为有效的 C#
字符串。
相关文章
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:198 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:171 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:187 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中发出 HTTP POST Web 请求
发布时间:2024/02/04 浏览次数:131 分类:编程语言
-
在 C# 中,可以使用 3 种主要方法来发出 HTTP POST Web 请求:WebClient 类,HttpWebRequest 类和 HttpClient 类。本教程将讨论在 C# 中发出 HTTP POST Web 请求的方法。使用 C# 中的 WebClient 类发出 HTTP POST Web 请求
在 C# 中运行命令提示符命令
发布时间:2024/02/04 浏览次数:130 分类:编程语言
-
Process 类可用于在 C# 中运行命令提示符命令。在 C# 中使用 Process.Start() 函数运行命令提示符命令
在 C# 中调整图像大小
发布时间:2024/02/04 浏览次数:203 分类:编程语言
-
有两种主要方法可用于在 C# 中调整图像的大小,Bitmap 类构造函数和 graphics.DrawImage()函数。在本教程中,我们将讨论在C#中调整图像大小的方法。我们将带您完成整个过程,从加载原始图像到保
在 C# 中下载图片
发布时间:2024/02/04 浏览次数:138 分类:编程语言
-
有 3 种主要方法可用于下载 C# 中的图片,WebClient.DownloadFile()函数,Bitmap 类和 Image.FromStream()函数。在 C# 中使用 WebClient 类下载图片 WebClient 类提供了用于向 C# 中的 URL 发送数据和从 URL 接收数据
在 C# 中使用秒表
发布时间:2024/02/04 浏览次数:139 分类:编程语言
-
我们可以使用 Stopwatch 类来计算 C# 中的经过时间。使用 C# 中的秒表类计算经过时间 Stopwatch 类在 C# 中准确测量经过的时间。
在 C# 中获取可执行路径
发布时间:2024/02/04 浏览次数:200 分类:编程语言
-
有 3 种主要方法可用于获取 C# 中程序的可执行路径,即 Assembly 类,AppDomain 类和 Path 类。本教程将介绍获取 C# 代码的可执行路径的方法。使用 C# 中的 Assembly 类获取可执行路径