L'esempio seguente mostra come calcolare un hash MD5 in C#. L'hash è calcolato tra due stringe (qs1 + qs2) e una terza stringa segreta (secretString) tramite la funzione MD5GenerateHashWithSecret. Per verificare se l'hash ricevuto è valido, ovvero arriva da un mittente conosciuto (che conosce la secretString) si usa la funzione MD5CheckHashWithSecret che ricalcola l'hash dei parametri ricevuti (ad esempio in query string), ricalcola l'hash MD5 e lo confronta con quello ricevuto. Le funzioni lavorano con un hash codificato in base64 per comodità di invio quando usato sul web.
C#
class Program
  {
    static void Main(string[] args)
    {
      string qs1 = "sgart";
      string qs2 = "20090321";
      string hash = "rfxqiH5A8MKSpTcCKlArQA==";

      //calculate hash of parameters
      Console.WriteLine(MD5GenerateHashWithSecret(qs1+qs2));

      //validate parameters, check if hash received is equal to calculated -> ok
      Console.WriteLine(MD5CheckHashWithSecret(qs1 + qs2, hash));
    }


    public static string MD5GenerateHashWithSecret(string inputString)
    {
      string secretString = "mySecretString_33aa";
      return MD5GenerateHash(inputString + secretString);
    }

    public static bool MD5CheckHashWithSecret(string inputString, string base64Hash)
    {
      return MD5GenerateHashWithSecret(inputString) == base64Hash;
    }


    /// <summary>
    /// Compute MD5 hash of string 
    /// and return a string encoded base64
    /// </summary>
    /// <param name="inputString"></param>
    /// <returns></returns>
    public static string MD5GenerateHash(string inputString)
    {
      System.Security.Cryptography.MD5 hash = System.Security.Cryptography.MD5.Create();
      Byte[] inputBytes = ASCIIEncoding.Default.GetBytes(inputString);
      Byte[] outputBytes = hash.ComputeHash(inputBytes);
      return Convert.ToBase64String(outputBytes);
    }
  }
Potrebbe interessarti anche: