久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C# 計(jì)算文件的 Hash 值

 勤奮不止 2017-11-08
復(fù)制代碼
/// <summary>
  /// 提供用于計(jì)算指定文件哈希值的方法
  /// <example>例如計(jì)算文件的MD5值:
  /// <code>
  ///   String hashMd5=HashHelper.ComputeMD5("MyFile.txt");
  /// </code>
  /// </example>
  /// <example>例如計(jì)算文件的CRC32值:
  /// <code>
  ///   String hashCrc32 = HashHelper.ComputeCRC32("MyFile.txt");
  /// </code>
  /// </example>
  /// <example>例如計(jì)算文件的SHA1值:
  /// <code>
  ///   String hashSha1 =HashHelper.ComputeSHA1("MyFile.txt");
  /// </code>
  /// </example>
  /// </summary>
  public sealed class HashHelper
  {
      /// <summary>
      ///  計(jì)算指定文件的MD5值
      /// </summary>
      /// <param name="fileName">指定文件的完全限定名稱</param>
      /// <returns>返回值的字符串形式</returns>
      public static String ComputeMD5(String fileName)
      {
          String hashMD5 = String.Empty;
          //檢查文件是否存在,如果文件存在則進(jìn)行計(jì)算,,否則返回空值
          if (System.IO.File.Exists(fileName))
          {
              using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
              {
                  //計(jì)算文件的MD5值
                  System.Security.Cryptography.MD5 calculator=System.Security.Cryptography.MD5.Create();
                  Byte[] buffer = calculator.ComputeHash(fs);
                  calculator.Clear();
                  //將字節(jié)數(shù)組轉(zhuǎn)換成十六進(jìn)制的字符串形式
                  StringBuilder stringBuilder = new StringBuilder();
                  for (int i = 0; i < buffer.Length; i++)
                  {
                      stringBuilder.Append(buffer[i].ToString("x2"));
                  }
                 hashMD5= stringBuilder.ToString();
              }//關(guān)閉文件流
          }//結(jié)束計(jì)算
          return hashMD5;
      }//ComputeMD5
      /// <summary>
      ///  計(jì)算指定文件的CRC32值
      /// </summary>
      /// <param name="fileName">指定文件的完全限定名稱</param>
      /// <returns>返回值的字符串形式</returns>
      public static String ComputeCRC32(String fileName)
      {
          String hashCRC32 = String.Empty;
          //檢查文件是否存在,,如果文件存在則進(jìn)行計(jì)算,否則返回空值
          if (System.IO.File.Exists(fileName))
          {
              using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
              {
              //計(jì)算文件的CSC32值
              Crc32 calculator = new Crc32();
              Byte[] buffer = calculator.ComputeHash(fs);
              calculator.Clear();
              //將字節(jié)數(shù)組轉(zhuǎn)換成十六進(jìn)制的字符串形式
              StringBuilder stringBuilder = new StringBuilder();
              for (int i = 0; i < buffer.Length; i++)
              {
                  stringBuilder.Append(buffer[i].ToString("x2"));
              }
              hashCRC32 = stringBuilder.ToString();
              }//關(guān)閉文件流
          }
          return hashCRC32;
      }//ComputeCRC32
      /// <summary>
      ///  計(jì)算指定文件的SHA1值
      /// </summary>
      /// <param name="fileName">指定文件的完全限定名稱</param>
      /// <returns>返回值的字符串形式</returns>
      public static String ComputeSHA1(String fileName)
      {
          String hashSHA1 = String.Empty;
          //檢查文件是否存在,,如果文件存在則進(jìn)行計(jì)算,,否則返回空值
          if (System.IO.File.Exists(fileName))
          {
              using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
              {
                  //計(jì)算文件的SHA1值
                  System.Security.Cryptography.SHA1 calculator = System.Security.Cryptography.SHA1.Create();
                  Byte[] buffer = calculator.ComputeHash(fs);
                  calculator.Clear();
                  //將字節(jié)數(shù)組轉(zhuǎn)換成十六進(jìn)制的字符串形式
                  StringBuilder stringBuilder = new StringBuilder();
                  for (int i = 0; i < buffer.Length; i++)
                  {
                      stringBuilder.Append(buffer[i].ToString("x2"));
                  }
                  hashSHA1 = stringBuilder.ToString();
              }//關(guān)閉文件流
          }
          return hashSHA1;
      }//ComputeSHA1
  }//end class: HashHelper
   /// <summary>
   /// 提供 CRC32 算法的實(shí)現(xiàn)
   /// </summary>
   public class Crc32 : System.Security.Cryptography.HashAlgorithm
   {
       public const UInt32 DefaultPolynomial = 0xedb88320;
       public const UInt32 DefaultSeed = 0xffffffff;
       private UInt32 hash;
       private UInt32 seed;
       private UInt32[] table;
       private static UInt32[] defaultTable;
       public Crc32()
       {
           table = InitializeTable(DefaultPolynomial);
           seed = DefaultSeed;
           Initialize();
       }
       public Crc32(UInt32 polynomial, UInt32 seed)
       {
           table = InitializeTable(polynomial);
           this.seed = seed;
           Initialize();
       }
       public override void Initialize()
       {
           hash = seed;
       }
       protected override void HashCore(byte[] buffer, int start, int length)
       {
           hash = CalculateHash(table, hash, buffer, start, length);
       }
       protected override byte[] HashFinal()
       {
           byte[] hashBuffer = UInt32ToBigEndianBytes(~hash);
           this.HashValue = hashBuffer;
           return hashBuffer;
       }
       public static UInt32 Compute(byte[] buffer)
       {
           return ~CalculateHash(InitializeTable(DefaultPolynomial), DefaultSeed, buffer, 0, buffer.Length);
       }
       public static UInt32 Compute(UInt32 seed, byte[] buffer)
       {
           return ~CalculateHash(InitializeTable(DefaultPolynomial), seed, buffer, 0, buffer.Length);
       }
       public static UInt32 Compute(UInt32 polynomial, UInt32 seed, byte[] buffer)
       {
           return ~CalculateHash(InitializeTable(polynomial), seed, buffer, 0, buffer.Length);
       }
       private static UInt32[] InitializeTable(UInt32 polynomial)
       {
           if (polynomial == DefaultPolynomial && defaultTable != null)
           {
               return defaultTable;
           }
           UInt32[] createTable = new UInt32[256];
           for (int i = 0; i < 256; i++)
           {
               UInt32 entry = (UInt32)i;
               for (int j = 0; j < 8; j++)
               {
                   if ((entry & 1) == 1)
                       entry = (entry >> 1) ^ polynomial;
                   else
                       entry = entry >> 1;
               }
               createTable[i] = entry;
           }
           if (polynomial == DefaultPolynomial)
           {
               defaultTable = createTable;
           }
           return createTable;
       }
       private static UInt32 CalculateHash(UInt32[] table, UInt32 seed, byte[] buffer, int start, int size)
       {
           UInt32 crc = seed;
           for (int i = start; i < size; i++)
           {
               unchecked
               {
                   crc = (crc >> 8) ^ table[buffer[i] ^ crc & 0xff];
               }
           }
           return crc;
       }
       private byte[] UInt32ToBigEndianBytes(UInt32 x)
       {
           return new byte[] { (byte)((x >> 24) & 0xff), (byte)((x >> 16) & 0xff), (byte)((x >> 8) & 0xff), (byte)(x & 0xff) };
       }
   }//end class: Crc32
復(fù)制代碼

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約