אתגר תכנות: איתור מקור של MD5 Hashes

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

eb2ede814c8cb51b9d1367394a9609bf
0aa54223e49d5470b69171cb184bb15b
83acf9405658783ffb15c551242f9ac8
8f7ea8b8fca46e8dbe3812c1221ecabc
b869ea1277748037a8949f4579490f53
5f4dcc3b5aa765d61d8327deb882cf99
3c40f04ff7652e732463a3d8a16d5f30
6899d797cac2b03bc4342e1a75be65a2

בונוס: נסו לחפש מכמה תהליכים במקביל כדי להגיע לתשובה מהר יותר.

אפשר ורצוי לפרסם את התוכנית שכתבתם בתגובות.

רמז: לפעמים חיפוש פשוט בגוגל יכול לעזור. (ולפעמים גם לא).

MD5 הינה פונקציית HASH. כלומר מערבל שמאבד נתונים תוך כדי התהליך ומייצר ערך בטווח 2 בחזקת 128.
כלומר, אין דרך “לחשב לאחור” אלא רק להזין נתונים (לנחש למשל) ולבדוק האם התוצאה המתקבלת היא המבוקשת.

עם זאת, ברור שייתכנו מספר ערכים (למעשה אינסופי) שמתמפים לערך המבוקש. צריך רק נציג אחד…

ב PHP הפונקציה md5($str) תחשב את ה HASH. נשאר רק לכתוב לולאה שמייצרת סדרות “סטרינגים” מפעילה את הפונקציה
ובודקת תוצאה. במקרה שאחד מ 5 הערכים שניתנו נמצא. נדפיס את המקור.
מתאים למי שיש CPU משועמם בלילות…

לא בטוח שצריך את כל הלילה בשביל זה … האמת שזה תלוי במאפיינים של טקסט המקור,
למשל אם אתה יודע שמדובר בסיסמא אז אפשר להניח שלא יהיו שם יותר מדי תווים.
הגורם השני שמשפיע זה איזה תווים הופיעו בטקסט המקורי (ממנו חושב ה MD5).

בדיוק בגלל זה הודעה כזאת יכולה להיות כל כך מרגיזה כשבוחרים סיסמא-

(כי זה נותן רמז למי שהשיג את קובץ הסיסמאות מאיזה תווים כל סיסמא מורכבת)

צודק לגמרי. אפשר לשפר את הניחוש על ידי יצירת סיסמאות עם "מאפיינים אנושיים"
או לחילופין לגשת לאתרי האקרים - שם תמצא עוד שיפורים…
בהנחה שאורך הסיסמא בין 6 ל 20 תווים וניתן לצמצם את התווים האפשריים
ניתן לקצר את זמן החיפוש

לדוגמא:
http://project-rainbowcrack.com/table.htm