密碼學系列——訊息摘要(c#程式碼實操)

團隊buff工具人發表於2020-08-10

前言

簡介:

訊息摘要(Message Digest)又稱為數字摘要(Digital Digest)
它是一個唯一對應一個訊息或文字的固定長度的值,它由一個單向Hash加密函式對訊息進行作用而產生
使用數字摘要生成的值是不可以篡改的,為了保證檔案或者值的安全

無論輸入的訊息有多長,計算出來的訊息摘要的長度總是固定的。例如應用MD5演算法摘要的訊息有128個位元位,用SHA-1演算法摘要的訊息最終有160位元位的輸出
只要輸入的訊息不同,對其進行摘要以後產生的摘要訊息也必不相同;但相同的輸入必會產生相同的輸出
訊息摘要是單向、不可逆的
常見演算法 :

  • MD5
  • SHA1
  • SHA256
  • SHA512

正文

展示md5的訊息加解密:

static void Main(string[] args)
{
	MD5 d5 = MD5.Create();
	byte[] buff=Encoding.Default.GetBytes("敗落的城鎮");
	byte[] md5buffer = d5.ComputeHash(buff);
	string str = "";
	foreach (byte b in md5buffer)
	{
             //轉換為16進位制
             str += b.ToString("x2");
	}
	Console.WriteLine(str);
	Console.ReadKey();
}

結果:

其他的訊息摘要也是如此。

就是加密的思路就是:

轉換為byte 陣列。

然後對byte進行數字摘要,轉換為16進位制。

對了,訊息摘要不可逆。

那麼檔案如何校驗呢?檔案考慮到一個點就是,檔案特別大的情況下,難道全部讀取出來做校驗?

不是的,那麼請看。

static void Main(string[] args)
{
	FileStream fileStream = new FileStream("C:\\test\\test.txt", FileMode.Open);
	byte[] bs = new byte[1024];
	fileStream.Read(bs,0,bs.Length);
	MD5 d5 = MD5.Create();
	var result= d5.ComputeHash(bs);
	var str = new StringBuilder();
	foreach (var s in result)
	{
		str.Append(s.ToString("x2"));
	}
	Console.WriteLine(str);
	Console.ReadKey();
}

我最多取1024個位元組來進行校驗,因為這已經夠了。

因為如果客戶端被破解,那麼實際是沒有意義的,檔案校驗是傳輸過程中避免被修改。

相關文章