Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / security / cryptography

Sha1 Hash generation Tool using C#.NET

5.00/5 (2 votes)
30 Sep 2010CPOL 32.2K  
The sha1 hash generation tool can be used to generate hashes on a file. The has generated can be outputted in the form of dig/Hex/Base64. You may use this utility to verify the integrity of the file transported over internet to make sure they are safe from tampering.
Using the code:
The complete code is given below. The enum EncodeStyle is used to determine what encoding should be applied on output hash value. SHA1HashEncode is the main utility function which uses SHA1CryptoServiceProvider class to provide hashing. This function takes two input arguments 1) path of file which need to be hashed and 2) encoding style of outputed hash value. Call this function from your main program.

C#
using System;
using System.IO;
using System.Security.Cryptography;

public enum EncodeStyle
{
  Dig,
  Hex,
  Base64
};

static string ByteArrayToString(byte[] arrInput, EncodeStyle encode)
{
  int i;
  StringBuilder sOutput = new StringBuilder(arrInput.Length);
  if(EncodeStyle.Base64 == encode)
  {
     return Convert.ToBase64String(arrInput);
  }
  for (i = 0; i < arrInput.Length; i++)
  {
    switch(encode)
    {
       case EncodeStyle.Dig:
       //encode to decimal with 3 digits so 7 will be 007 (as range of 8 bit is 127 to -128)
       sOutput.Append(arrInput[i].ToString("D3"));
       break;
       case EncodeStyle.Hex:
       sOutput.Append(arrInput[i].ToString("X2"));
       break;
    }
  }
  return sOutput.ToString();
}

static string SHA1HashEncode(string filePath, EncodeStyle encode)
{
  SHA1 a = new SHA1CryptoServiceProvider();
  byte[] arr = new byte[60];
  string hash = "";
  using (StreamReader sr = new StreamReader(filePath))
  {
     arr = a.ComputeHash(sr.BaseStream);
     hash = ByteArrayToString(arr, encode);
  }
  return hash;
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)