最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年07月31日 17:13:59   作者:WeihanLi  
目前校驗(yàn)文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段時(shí)間微軟發(fā)布了VisualStudio正式版,win鏡像,微軟官方給出的校驗(yàn)方式都是校驗(yàn)文件的SHA值。下面詳細(xì)介紹C#之文件校驗(yàn)工具的開發(fā)及問題,需要的朋友可以參考下

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

       C#進(jìn)行MD加密與SHA加密的實(shí)現(xiàn)總結(jié)在這里
.文件的加密計(jì)算
知道了如何進(jìn)行普通字符串的加密還不夠,我們要校驗(yà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ù)的,如何讓代碼更精簡(jiǎn)呢?重構(gòu),提高代碼的復(fù)用率,最初想的是建一個(gè)基類,其他各種具體實(shí)現(xiàn)都在繼承它,但又覺得好麻煩,要新建好幾個(gè)類,最終決定,建一個(gè)類,用最簡(jiǎn)單的重構(gòu),封裝方法。
最終加密幫助類實(shí)現(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);
     }
   }

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

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

相關(guān)文章

最新評(píng)論

石台县| 汕尾市| 浮山县| 新巴尔虎右旗| 临颍县| 文昌市| 万山特区| 道真| 中宁县| 普兰县| 平邑县| 突泉县| 嵊泗县| 工布江达县| 平山县| 平和县| 习水县| 磐石市| 锦屏县| 阿合奇县| 龙门县| 贡山| 黎城县| 泰和县| 常德市| 阆中市| 凤庆县| 汉中市| 博湖县| 黄龙县| 汾西县| 宜州市| 古田县| 长春市| 龙岩市| 石家庄市| 达日县| 金川县| 黄冈市| 翼城县| 黑龙江省|