264. Computing a MD5 hash

מנגנון הHashing (גיבוב) הוא מנגנון המאפשר לבצע “הצפנה” חד כיוונית.

הרעיון הוא להמיר מידע בגודל לא מוגבל, לאובייקט כלשהו בעל גודל קבוע המייצג אותו.

ההמרה מתבצעת בצורה שהיא רגישה לרעשים, כך שאם מתבצע שינוי קטן במידע, יתבצע שינוי דרסטי בHash.

הדבר שימושי במספר מקומות: לדוגמה, בהשוואת קבצים, בד”כ בדיקה שהHash שלהם לפי אלגוריתם מסוים הוא שווה, מספיק אמינה כדי להניח שהקבצים זהים.

בנוסף, בשמירת סיסמאות: יש לא מעט Databaseים שלא שומרים את הסיסמאות של המשתמשים שלהם, אלא רק את הHash של הסיסמאות, כך שאם מישהו נכנס לDatabase, הוא לא יוכל לקבל מידע רגיש. כאשר משתמש מנסה להתחבר למערכת, מתבצעת השוואה של הסיסמה שלו לHash ששמור במערכת.

אחד אלגוריתמי הHash הנפוצים בעולם הוא אלגוריתם הMD5.

כיום הוא לא נחשב האלגוריתם הכי טוב, אך הוא עדיין מספיק שימושי.

בFramework יש לנו תמיכה במספר אלגוריתמי גיבוב, ביניהם גם באלגוריתם MD5.

השימוש בו הוא כזה:

1
2
3
4
5
6
MD5 algorithm = MD5.Create();
using (FileStream stream = newFileStream(@"MyFile.txt",FileMode.Open))
{
byte[] hash = algorithm.ComputeHash(stream);
}

מאחר ואלגוריתם MD5 מחזיר לנו מערך של 16 בתים, בד"כ נוח להסתכל על הHash כGuid:

1
2
3
4
5
6
7
8
9
10
11
Guid hashGuid;
MD5 algorithm = MD5.Create();
using (FileStream stream = newFileStream(@"MyFile.txt",FileMode.Open))
{
byte[] hash = algorithm.ComputeHash(stream);
hashGuid = new Guid(hash);
}
Console.WriteLine(hashGuid);//1245511d-d93c-9054-5eb0-04a9a5ac51c9

שתהיה לכולנו שנה מעולה ומלאת אמון!

שתף