密碼學系列——訊息摘要(c#程式碼實操)
阿新 • • 發佈: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個位元組來進行校驗,因為這已經夠了。
因為如果客戶端被破解,那麼實際是沒有意義的,檔案校驗是傳輸過程中避免被修改。