Come calcolare un hash MD5
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.
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);
}
}