程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 具體引見C#之文件校驗對象的開辟及成績

具體引見C#之文件校驗對象的開辟及成績

編輯:C#入門知識

具體引見C#之文件校驗對象的開辟及成績。本站提示廣大學習愛好者:(具體引見C#之文件校驗對象的開辟及成績)文章只能為提供參考,不一定能成為您想要的結果。以下是具體引見C#之文件校驗對象的開辟及成績正文


.加密算法的熟習
    今朝校驗文件應用最多的是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值。但是癡頑,不曉得該若何完成,望年夜神看到以後能賜與一些指點,萬分感激。

以上引見就是本文的全體內容,願望年夜家愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved