Program: sprawdzający poprawność haszowania MD5.
Jak w opisie.
Kompilator: Microsoft Visual Studio
Kod programu:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace MD5_z_weryfikacją
{
class Program
{
static void Main(string[] args)
{
string source = "ggg";
using (MD5 md5Hash = MD5.Create())
{
string hash = GetMd5Hash(md5Hash, source);
Console.WriteLine("Wynik haszowania MD5 tekstu " + source + " jest: " + hash);
Console.WriteLine("Weryfikowanie...");
if(VerifyMd5Hash(md5Hash,source,hash))
Console.WriteLine("Hasze są te same");
else
Console.WriteLine("Hasze są te inne");
Console.ReadKey();
}
}
static string GetMd5Hash(MD5 md5Hash, string input)
{
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
sBuilder.Append(data[i].ToString("x2"));
return sBuilder.ToString();
}
static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
{
string hashOfInput = GetMd5Hash(md5Hash, input);
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
if(0 == comparer.Compare(hashOfInput,hash))
return true;
else
return false;
}
}
} Słowniczek pojęć:
Algorytm z dziedziny kryptografii. Jest to popularna kryptograficzna funkcja skrótu, która z ciągu danych o dowolnej długości generuje 128-bitowy skrót.
Algorytm został opracowany przez Rona Rivesta (współtwórcę RSA) w 1991. W 2004 znaleziono sposób na generowanie kolizji MD5, co obniża jego bezpieczeństwo w niektórych zastosowaniach (np. podpisywaniu plików).
Z powodu znanych ataków kryptoanalitycznych funkcja MD5 zdecydowanie nie powinna być używana w zastosowaniach wymagających odporności na kolizje, na przykład w podpisie cyfrowym. W innych, takich jak HMAC, nadal może zapewniać satysfakcjonujący poziom bezpieczeństwa choć stosowanie jej w nowych rozwiązaniach nie jest zalecane.