.加密算法的熟悉
目前校驗文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段時間微軟發布了VisualStudio正式版,win鏡像,微軟官方給出的校驗方式都是校驗文件的SHA值。
C#進行MD加密與SHA加密的實現總結在這里
.文件的加密計算
知道了如何進行普通字符串的加密還不夠,我們要校驗的文件的MD值或SHA值,接下來熟悉如何獲取文件的MD值和SHA值
獲取文件的MD值
public static string GetFileMD(string filePath) { MDCryptoServiceProvider md = new MDCryptoServiceProvider(); FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] result = md.ComputeHash(fs); md.Clear(); StringBuilder sb = new StringBuilder(); for (int i = ; i < result.Length; i++) { sb.Append(result[i].ToString("X")); } return sb.ToString(); }
獲取文件的SHA值
public static string GetFileSHA(string filePath) { SHA sha = new SHACryptoServiceProvider(); FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] result = sha.ComputeHash(fs); sha.Clear(); StringBuilder sb = new StringBuilder(); for (int i = ; i < result.Length; i++) { sb.Append(result[i].ToString("X")); } return sb.ToString(); }
public static class ValidHelper { public static string GetFileHash(string filePath, HashAlgorithm algorithm) { FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] result = algorithm.ComputeHash(fs); algorithm.Clear(); StringBuilder sb = new StringBuilder(); for (int i = ; i < result.Length; i++) { sb.Append(result[i].ToString("X")); } return sb.ToString(); } public static string GetFileMD(string filePath) { MDCryptoServiceProvider md = new MDCryptoServiceProvider(); return GetFileHash(filePath, md); } public static string GetFileSHA(string filePath) { SHA sha = new SHACryptoServiceProvider(); return GetFileHash(filePath, sha); } public static string GetFileSHA(string filePath) { SHA sha = SHA.Create(); return GetFileHash(filePath, sha); } public static string GetFileSHA(string filePath) { SHA sha = SHA.Create(); return GetFileHash(filePath, sha); } public static string GetFileSHA(string filePath) { SHA sha = SHA.Create(); return GetFileHash(filePath, sha); } }
.完成后測試與分析
代碼完成之后便是測試,在網上找一個文件校驗工具(使用的軟媒魔方里的校驗工具),進行比對,看自己的校驗工具是否與軟媒魔方的校驗工具的校驗結果是否一致,經校驗,沒有錯誤,最初測試的小文件,后來下載了一個win系統,使用自己的校驗工具,校驗是否和微軟官方給出的SHA值一致時,小工具直接卡死了,過了好長時間才出來結果,這說明這個小工具還待優化,尤其是處理大文件。
在網上查找資料,看到有這樣的實現思路,將文件在內存中的位置分段,比如說分成段,分個線程同時開始計算,最后將個計算值再經過處理得到整個文件的SHA值或MD值。然而愚鈍,不知道該如何實現,望大神看到之后能給予一些指導,萬分感謝。
以上介紹就是本文的全部內容,希望大家喜歡。
新聞熱點
疑難解答