国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

詳細(xì)介紹C#之文件校驗工具的開發(fā)及問題

2020-01-24 01:34:40
字體:
供稿:網(wǎng)友

.加密算法的熟悉
    目前校驗文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段時間微軟發(fā)布了VisualStudio正式版,win鏡像,微軟官方給出的校驗方式都是校驗文件的SHA值。

       C#進(jìn)行MD加密與SHA加密的實現(xiàn)總結(jié)在這里
.文件的加密計算
知道了如何進(jìn)行普通字符串的加密還不夠,我們要校驗的文件的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();     }

.文件加密數(shù)據(jù)結(jié)構(gòu)優(yōu)化
這么多方法,有許多方法大多數(shù)代碼還都是重復(fù)的,如何讓代碼更精簡呢?重構(gòu),提高代碼的復(fù)用率,最初想的是建一個基類,其他各種具體實現(xiàn)都在繼承它,但又覺得好麻煩,要新建好幾個類,最終決定,建一個類,用最簡單的重構(gòu),封裝方法。
最終加密幫助類實現(xiàn)代碼如下:
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);     }   }

.完成后測試與分析
代碼完成之后便是測試,在網(wǎng)上找一個文件校驗工具(使用的軟媒魔方里的校驗工具),進(jìn)行比對,看自己的校驗工具是否與軟媒魔方的校驗工具的校驗結(jié)果是否一致,經(jīng)校驗,沒有錯誤,最初測試的小文件,后來下載了一個win系統(tǒng),使用自己的校驗工具,校驗是否和微軟官方給出的SHA值一致時,小工具直接卡死了,過了好長時間才出來結(jié)果,這說明這個小工具還待優(yōu)化,尤其是處理大文件。
在網(wǎng)上查找資料,看到有這樣的實現(xiàn)思路,將文件在內(nèi)存中的位置分段,比如說分成段,分個線程同時開始計算,最后將個計算值再經(jīng)過處理得到整個文件的SHA值或MD值。然而愚鈍,不知道該如何實現(xiàn),望大神看到之后能給予一些指導(dǎo),萬分感謝。

以上介紹就是本文的全部內(nèi)容,希望大家喜歡。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 无为县| 富锦市| 霞浦县| 剑阁县| 乐清市| 宜兴市| 闵行区| 遂溪县| 虎林市| 文登市| 屏东市| 永城市| 酒泉市| 新龙县| 汽车| 富民县| 清新县| 长沙县| 北海市| 肥东县| 昌乐县| 车险| 高雄市| 广河县| 台山市| 安龙县| 东兰县| 青阳县| 忻城县| 鄂托克旗| 青川县| 云浮市| 南投县| 泸州市| 冕宁县| 乾安县| 兴仁县| 太仓市| 乐安县| 措勤县| 阆中市|