Творци оперативних система, веб апликација и других система на којима се аутентификација врши лозинкама, заправо у базама података не чувају лозинке корисника већ хеш вредности лозинки. Када се корисник пријављује на систем израчунава се хеш вредност његове лозинке и упоређује са сачуваном вредношћу у бази података. У случају компромитовања система нападач може доћи само до изврачунатих хеш вредности лозинки, али не и до самих лозинки. Наравно, ни овакви системи нису потпуно безбедни јер може доћи до колизије (да хеш функција примењена на различите низове карактера генерише исте вредности) или да нападач успе да “израчуна” лозинке или низове карактера чије ће хеш вредности одговарати хеш вредностима лозинки. За препоруке о хеширању лозинки прочитати RFC2898 и погледати имплементацију у програмском језику C#.
MD5 алгоритам производи хеш вредност дужине 128 бита која се обично представља помоћу 32 хексадекадна броја.
Задатак
Креирајте конзолну апликацију која ће израчунати хеш вредности помоћу MD5 алгоритма за задати стринг (UTF8).
Решење
using System;
using System.Security.Cryptography;
using System.Text;
namespace md5_hes
{
internal class Program
{
private static void Main()
{
Console.Write("Unesite tekst: ");
string tekst = Console.ReadLine();
MD5 md5hes = MD5.Create();
byte[] ulazniBajtovi = Encoding.UTF8.GetBytes(tekst);
byte[] izlazniBajtovi = md5hes.ComputeHash(ulazniBajtovi);
string hesVrednost = BitConverter.ToString(izlazniBajtovi).Replace("-", "");
Console.WriteLine("MD5: " + hesVrednost);
}
}
}
Тест пример
Unesite tekst: Heširaj mi ovaj tekst!
MD5: 34D3D16D8C670BF276499184A307582D
Документација
MD5 Class: https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5
MD5Cng Class: https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5cng
MD5CryptoServiceProvider Class: https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5cryptoserviceprovider