在 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#
字串。
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn