MD5、SHA256等Hash算法的實時計算

最近,在項目中,需要計算文件的hash值來對文件進行最終校驗,在C#中,MD5、SHA256都是直接可用的。下面以MD5爲例,

一般來說,計算文件hash值時,是加載一個文件,然後來讀取並計算,如下:

MD5 md = MD5.Create();
buffer = Encoding.ASCII.GetBytes("abc");//這裏abc表示從文件中讀取的內容
md.TransformBlock(buffer, 0, buffer.Length, buffer, 0);
md.TransformFinalBlock(buffer, 0, 0);
Console.WriteLine(System.Convert.ToBase64String(md.Hash));

以上結算結果

kAFQmDzST7DWlj99KOF/cg==

對於這種方式,小文件來說還好,但是,當文件大小達到10GB左右時,計算耗時大概2Min左右,文件更大,則效果更差。因此,我們需要一種能夠實時計算的方式。

 

實時計算hash值,

我們期望,在記錄文件的過程中,直接計算hash值,等文件記錄完畢時,直接生成相應的文件hash值。

talk is cheap,show you code.

            var buffer = new byte[0];
            MD5 md5 = MD5.Create();
            buffer = Encoding.ASCII.GetBytes("a");
            md5.TransformBlock(buffer, 0, buffer.Length, buffer, 0);

            buffer = Encoding.ASCII.GetBytes("b");
            md5.TransformBlock(buffer, 0, buffer.Length, buffer, 0);

            buffer = Encoding.ASCII.GetBytes("c");
            md5.TransformBlock(buffer, 0, buffer.Length, buffer, 0);
            md5.TransformFinalBlock(buffer, 0, 0);
            Console.WriteLine(System.Convert.ToBase64String(md5.Hash));
kAFQmDzST7DWlj99KOF/cg==

至此,兩種方式結果相同,可知,可通過第二種方法來實時運用MD5等來計算hash值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章