<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#實現(xiàn)Hash應用全解

      1、引言

      HASH是根據(jù)文件內容的數(shù)據(jù)通過邏輯運算得到的數(shù)值, 不同的文件(即使是相同的文件名)得到的HASH值是不同的。

      Hash

      通過一定的哈希算法(典型的有MD5,SHA-1等),將一段較長的數(shù)據(jù)映射為較短小的數(shù)據(jù),這段小數(shù)據(jù)就是大數(shù)據(jù)的哈希值。他最大的特點就是唯一性,一旦大數(shù)據(jù)發(fā)生了變化,哪怕是一個微小的變化,他的哈希值也會發(fā)生變化。類似于DNA,既然是DNA,那就保證了沒有兩個數(shù)據(jù)的哈希值是完全相同的。

      哈希值的作用:哈希值,即HASH值,是通過對文件內容進行加密運算得到的一組二進制值,主要用途是用于文件校驗或簽名。正是因為這樣的特點,它常常用來判斷兩個文件是否相同。

      比如,從網(wǎng)絡上下載某個文件,只要把這個文件原來的哈希值同下載后得到的文件的哈希值進行對比,如果相同則表示兩個文件完全一致,下載過程沒有損壞文件。而如果不一致,則表明下載得到的文件跟原來的文件不同,文件在下載過程中受到了損壞。Hash的應用非常廣泛,主要應用于:

      1.文件校驗

      我們比較熟悉的校驗算法有奇偶校驗和CRC校驗,這2種校驗并沒有抗數(shù)據(jù)篡改的能力,它們一定程度上能檢測并糾正數(shù)據(jù)傳輸中的信道誤碼,但卻不能防止對數(shù)據(jù)的惡意破壞。
      MD5Hash算法的”數(shù)字指紋”特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)算法,不少Unix系統(tǒng)有提供計算md5checksum的命令。

      2. 唯一標識

      現(xiàn)在有十萬個文件, 給你一個文件, 要你在這十萬個文件中查找是否存在. 一個很笨的辦法就是把每一文件都拿出來, 然后按照二進制串一一進行對比. 但是這個操作注定是比較費時的。可以用哈希算法對文件進行計算, 然后比較哈希值是否相同。 因為存在哈希沖突的情況, 你可以在相同哈希值的文件再進行二進制串比較.

      3. 數(shù)字簽名

      Hash算法也是現(xiàn)代密碼體系中的一個重要組成部分。由于非對稱算法的運算速度較慢,所以在數(shù)字簽名協(xié)議中,單向散列函數(shù)扮演了一個重要的角色。對Hash值,又稱”數(shù)字摘要”進行數(shù)字簽名,在統(tǒng)計上可以認為與對文件本身進行數(shù)字簽名是等效的。而且這樣的協(xié)議還有其他的優(yōu)點。

      4. 哈希表

      在哈希表中使用哈希函數(shù)已經(jīng)并不陌生了, 不再贅述。

      5. 負載均衡

      比如說, 現(xiàn)在又多臺服務器, 來了一個請求, 如何確定這個請求應該路由到哪個路由器呢?當然, 必須確保相同的請求經(jīng)過路由到達同一個服務器. 一種辦法就是保存一張路由關系的表, 比如客戶端IP和服務器編號的映射, 但是如果客戶端很多, 勢必查找的時間會很長。 這時, 可以將客戶端的唯一標識信息(如:IP、username等)進行哈希計算, 然后與服務器個數(shù)取模, 得到的就是服務器的編號。

      6. 分布式存儲

      當我們有大量數(shù)據(jù)時, 為了提高讀取與寫入的速度, 一般會選擇將數(shù)據(jù)存儲到多個服務器。 決定將文件存儲到哪臺服務器, 就可以通過哈希算法取模的操作來得到。

      但是, 如果數(shù)據(jù)多了, 要增加服務器了, 問題就來了, 比如原來是10臺服務器, 現(xiàn)在變成15臺了, 那么原來哈希值為16的文件被分配到編號6的服務器, 現(xiàn)在被分配到編號1的服務器, 也就意味著所有文件都要重新計算哈希值并重新非陪服務器進行存儲。 一致性哈希就是這個用途。

      分布式存儲

      2、C#開發(fā)用于計算文件Hash的輔助類HashHelper

      在C#中,數(shù)據(jù)的Hash以MD5或SHA1的方式實現(xiàn),MD5與SHA1都是Hash算法,MD5輸出是128位的,SHA1輸出是160位的,MD5比SHA1快,SHA1比MD5強度高。

      2.1、SHA-1和MD5的比較

      因為二者均由MD4導出,SHA-1和MD5彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:

      1)對強行攻擊的安全性:最顯著和最重要的區(qū)別是SHA-1摘要比MD5摘要長32 位。使用強行技術,產生任何一個報文使其摘要等于給定報摘要的難度對MD5是2128數(shù)量級的操作,而對SHA-1則是2160數(shù)量級的操作。這樣,SHA-1對強行攻擊有更大的強度。

      2)對密碼分析的安全性:由于MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。

      3)速度:在相同的硬件上,SHA-1的運行速度比MD5慢。

      2.2、SHA-1和MD5在C#中的實現(xiàn)

      /// <summary>
      /// Hash輔助類
      /// </summary>
      public class HashHelper
      {
          /// <summary>
          /// 計算文件的 MD5 值
          /// </summary>
          /// <param name="fileName">要計算 MD5 值的文件名和路徑</param>
          /// <returns>MD5 值16進制字符串</returns>
          public static string MD5File(string fileName)
          {
              return HashFile(fileName, "md5");
          }
      
          /// <summary>
          /// 計算文件的 sha1 值
          /// </summary>
          /// <param name="fileName">要計算 sha1 值的文件名和路徑</param>
          /// <returns>sha1 值16進制字符串</returns>
          public static string SHA1File(string fileName)
          {
              return HashFile(fileName, "sha1");
          }
      
          /// <summary>
          /// 計算文件的哈希值
          /// </summary>
          /// <param name="fileName">要計算哈希值的文件名和路徑</param>
          /// <param name="algName">算法:sha1,md5</param>
          /// <returns>哈希值16進制字符串</returns>
          private static string HashFile(string fileName, string algName)
          {
              if (!System.IO.File.Exists(fileName))
              {
                  return string.Empty;
              }
      
              System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
              byte[] hashBytes = HashData(fs, algName);
              fs.Close();
              return ByteArrayToHexString(hashBytes);
          }
      
          /// <summary>
          /// 計算哈希值
          /// </summary>
          /// <param name="stream">要計算哈希值的 Stream</param>
          /// <param name="algName">算法:sha1,md5</param>
          /// <returns>哈希值字節(jié)數(shù)組</returns>
          private static byte[] HashData(System.IO.Stream stream, string algName)
          {
              System.Security.Cryptography.HashAlgorithm algorithm;
              if (algName == null)
              {
                  throw new ArgumentNullException("algName 不能為 null");
              }
      
              if (string.Compare(algName, "sha1", true) == 0)
              {
                  algorithm = System.Security.Cryptography.SHA1.Create();
              }
              else
              {
                  if (string.Compare(algName, "md5", true) != 0)
                  {
                      throw new Exception("algName 只能使用 sha1 或 md5");
                  }
                  algorithm = System.Security.Cryptography.MD5.Create();
              }
      
              return algorithm.ComputeHash(stream);
          }
      
          /// <summary>
          /// 字節(jié)數(shù)組轉換為16進制表示的字符串
          /// </summary>
          private static string ByteArrayToHexString(byte[] buf)
          {
              return BitConverter.ToString(buf).Replace("-", "");
          }
      }
      

      2.2、SHA-1和MD5在C#中的實現(xiàn)的測試用例

      [TestClass]
      public class HashHelperUnitTest
      {
          [TestMethod]
          public void TestMethod1()
          {
              string fileName = @"D:\TempTest\RDIFramework.BizLogic.dll";
              Assert.AreEqual(0, 0);
      
              //01.計算文件的 MD5 值
              Console.WriteLine(string.Format("計算文件的 MD5 值:{0}", HashHelper.MD5File(fileName)));
      
              //02.計算文件的 sha1 值
              Console.WriteLine(string.Format("計算文件的 sha1 值:{0}", HashHelper.SHA1File(fileName)));
          }
      }
      

      測試與輸出結果

      參考文章

      框架相關


      一路走來數(shù)個年頭,感謝RDIFramework.NET框架的支持者與使用者,大家可以通過下面的地址了解詳情。

      RDIFramework.NET官方網(wǎng)站:http://www.rdiframework.net/

      RDIFramework.NET官方博客:http://blog.rdiframework.net/

      同時需要說明的,以后的所有技術文章以官方網(wǎng)站為準,歡迎大家收藏!

      RDIFramework.NET框架由海南國思軟件科技有限公司專業(yè)團隊長期打造、一直在更新、一直在升級,請放心使用!

      歡迎關注RDIFramework.net框架官方公眾微信(微信號:guosisoft),及時了解最新動態(tài)。

      掃描二維碼立即關注

      微信號:guosisoft

      posted @ 2019-08-05 11:27  .NET快速開發(fā)框架  閱讀(8834)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产福利姬喷水福利在线观看| 91中文字幕一区在线| 久久久久亚洲A√无码| 国产日韩精品一区在线不卡| 精品国产中文字幕av| 中文字幕日韩精品有码| 蜜臀av一区二区国产在线| 全国最大成人网| 亚洲精品自拍在线视频| 亚洲一区av无码少妇电影| 久国产精品韩国三级视频| 巨胸不知火舞露双奶头无遮挡| 国产成人av一区二区三区不卡| 国产精自产拍久久久久久蜜| 欧美色欧美亚洲高清在线观看| 免费超爽大片黄| 四虎影视库国产精品一区| 又黄又无遮挡AAAAA毛片| 国产一区二区三区十八禁| 最新中文字幕国产精品| 久久久一本精品99久久精品88| 久久精品一本到99热免费| 亚洲天堂av 在线| 苏尼特右旗| 亚洲中文久久久久久精品国产| 国产成人精品免费视频大全| 免费超爽大片黄| 成a人片亚洲日本久久| 精品国产一区二区色老头| 黄瓜视频在线观看| 99热精品久久只有精品| 库尔勒市| 亚洲午夜亚洲精品国产成人| 精品无码久久久久久尤物| 亚洲成人精品一区二区中| 在线观看特色大片免费视频| 精品久久精品久久精品久久 | 一卡2卡三卡4卡免费网站| 久久丫精品久久丫| 亚洲人成电影网站 久久影视| 黑人巨大AV在线播放无码|