ROB אודן: אני רוב, ו בואו לקבל פיצוח. אז זוכר מהמפרט שpset אנחנו הולכים להיות צורך להשתמש פונקצית קריפטה. לדף האדם, יש לנו שתיים חשיש להגדיר _xopensource. אל תדאגו בקשר למה אנחנו צריכים לעשות את זה. וגם חשיש כולל unistd.h. אז ברגע שיצא לדרך, בואו להגיע לתכנית בפועל. דבר הראשון שאנחנו צריכים לעשות הוא לוודא המשתמש נכנס לתוקף מוצפן סיסמא בשורת הפקודה. זכור כי התכנית אמורה להתנהל כמו סדק לוכסן נקודה, ו אז מחרוזת מוצפנת. אז הנה אנחנו בודקים כדי לוודא שargc לשתיים אם אנחנו רוצים תמשיך עם התכנית. אם argc הוא לא שתיים, זה אומר שגם המשתמש לא נכנס מוצפן סיסמא בשורת הפקודה, או שהם נכנס יותר מסתם מוצפן סיסמא בשורת הפקודה, שבו מקרה אנחנו לא יודעים מה לעשות עם טיעוני שורת הפקודה. אז אם argc היה שתיים, אנחנו יכולים להמשיך. והנה, אנחנו הולכים להכריז משתנה מוצפן. זה פשוט הולך לכינוי המקורי argv1 כך שבמשך כל הזמן הזה תכנית, אנחנו לא צריכים לקרוא לזה argv1, שאז אתה צריך לחשוב על מה זה אומר בעצם. אז סוף סוף, אנחנו רוצים לאמת כי סיסמא המוצפנת למשתמש נכנס היה יכול להיות באמת סיסמא מוצפנת. לדף איש קריפטה, סיסמא מוצפנת חייבת להיות 13 תווים. עד כאן, שים לב שאנחנו חשיש מוגדר להצפין אורך כמו 13. אז אנחנו רק לוודא כי אורך מחרוזת של מוצפן סיסמא היא 13. ואם זה לא, אנחנו רוצים כדי לצאת מהתכנית. אז ברגע שיצאו לדרך, אנחנו יכולים עכשיו תנסה למצוא את מה שבעצם סיסמא שנתנה מוצפנים סיסמא הייתה. הנה, אנחנו רוצים לתפוס את המלח מהסיסמה המוצפנת. זכור, לכל האדם לעמוד, כי שני תווים הראשונים של מוצפן אוהב את המחרוזת, הנה - 50ZPJ וכן הלאה - שני התווים הראשונים לתת שלנו מלח ששימש בפונקצית קריפטה. והנה, אנו רואים כי מלח היה חה. אז אנחנו רוצים להעתיק את שני הראשונים דמויות, אורך מלח להיות חשיש מוגדר כשתיים. יש לנו כדי להעתיק את שני התווים הראשונים למערך זה, מלח. שים לב שאנו צריכים אורך מלח בתוספת אחד, שכן אנחנו עדיין צריכים null שליחות קטלנית בסופו של המלח שלנו. ואז אנחנו הולכים להכריז על מערך זה, אורחים, אורך מקסימלי של גודל פלוס אחד, שבו אורך המקסימלי הוא חשיש מוגדר כשמונה, שכן הסיסמה המרבית הוא ארוך שמונה תווים. ואנחנו הולכים להשתמש בזה כדי לחזר על כל המיתרים האפשריים שיכול סיסמאות להיות תקפות. אז אם את התווים החוקיים בסיסמא היו רק A, B, ו-C, ולאחר מכן היינו לחזר על, B, C, AA, BA, CA, וכן הלאה, עד אנחנו זוכים לראות cccccccc - שמונה של ג. ואם אין לנו את תוקף סיסמא, ואז אנחנו צריכים להגיד את זה מחרוזת מוצפנת לא הייתה חוקי מלכתחילה. אז עכשיו, שנגיע לזה בזמן שהלולאה 1. שים לב שאומר שזה לולאה אינסופית. שים לב שאין הצהרת הפסקה בתוך הלולאה האינסופית הזה. יש לחזור הצהרות בלבד. אז אנחנו אף פעם לא מצפים באמת כדי לצאת מהלולאה. אנו מצפים רק כדי לצאת מהתכנית. אני הוספתי הצהרה בהדפסה כדי החלק העליון של לולאה זה פשוט להדפיס את מה הניחוש הנוכחי שלנו ב מה היא הסיסמה. עכשיו, מה עושה את זה לולאה? זה לולאה על כל המחרוזות האפשריות שיכולים להיות סיסמאות תקפות. הדבר הראשון שאנחנו הולכים לעשות הוא לקחת הניחוש הנוכחי שלנו עבור מה סיסמא היא. אנחנו ניקח את המלח שתפסנו מ המחרוזת המוצפנת, ואנחנו הולך להצפין את הניחוש. זה ייתן לנו ניחוש מוצפן, שאנחנו הולכים להשוואה מול המחרוזת המוצפנת שהמשתמש נכנס בשורת הפקודה. אם הם זהים, ובמקרה זה מחרוזת דומה תחזור לאפס, אם הם זהים, ולאחר מכן מניח היה סיסמא שנוצרה מוצפנים מחרוזת, במקרה שבו אנו יכולים להדפיס כי כסיסמה וחזרתנו. אבל אם הם לא היו אותו הדבר, כי משמעות הדבר היא הניחוש שלנו היה שגוי. ואנחנו רוצים לחזר ל הניחוש חוקי הבא. אז זה מה שהזמן הזה לולאה הוא מנסה לעשות. זה הולך לחזר הניחוש שלנו לניחוש חוקי הבא. שים לב שכאשר אנו אומרים כי יש אופי מסוים בניחוש שלנו הגיע לסמל מקס, שעד כאן הוא מוגדר כחשיש טילדה, שכן זה האופי של הערך הגדול ביותר ASCII שהמשתמש יכול להזין ב מקלדת, כאשר התו מגיעה מקסימום סמל, ואז אנחנו רוצים לשלוח אותו בחזרה לסמל המינימום, ש הוא מרחב, שוב ASCII הנמוך ביותר סמל ערך שיכול משתמש להיכנס במקלדת. אז אנחנו הולכים לקבוע כי לסמל המינימום. ואז אנחנו הולכים ללכת לתו הבא. אז איך הם הניחושים שלנו הולך לחזר? ובכן, אם את התווים החוקיים הם A, B, וג, אז אם התחלנו עם, זה יהיה לחזר לב, זה יהיה לחזר לג. ג הוא סמל המקסימום שלנו, כך יהיה לנו להגדיר ג חזרה ל, סמל המינימום. ואז לחזר מדד לתו הבא. אז אם הניחוש המקורי היה ג, הבא הדמות הולכת להיות null שליחות קטלנית. כאן למטה, שים לב שאם האופי כי עכשיו אנחנו רוצים תוספת הייתה שליחות קטלנית הריקה, אז אנחנו הולכים להגדיר אותו סמל מינימום. אז אם הניחוש היה C, אז הניחוש חדש הולך להיות aa. ואם הניחוש המקורי שלנו היה cccc, אז הניחוש שלנו החדש הולך להיות aaaaa. אז בכל פעם שאנחנו מגיעים למחרוזת המרבית של אורך מסוים, אז אנחנו הולך ליישם למחרוזת המינימום של האורך הבא, יהיה אשר פשוט להיות כל התווים של סמל המינימום. עכשיו, מה הוא סימון זו עושה כאן? ובכן, אם המדד עבר משמיני תו לתו תשעה - לכן אנחנו מוסיפים שמונה C של כ הקודם שלנו לנחש - לאחר מכן מדד הולך להתמקד עברה null שליחות קטלנית של הניחוש שלנו מערך, שלא נועד למעשה ניתן להשתמש בסיסמה שלנו. אז אם אנחנו מתמקדים שבnull האחרון שליחות קטלנית, אז אנחנו לא מצאנו סיסמא שתקפה רק באמצעות שמונה דמויות, מה שאומר שאין סיסמא חוקית שמצפינה למחרוזת הנתונה. ואנחנו צריכים להדפיס את זה, ואמרו אנחנו לא הצלחנו למצוא את תוקף סיסמא, והחזרה. אז לולאה בזמן זה הולכת לחזר על כל המיתרים האפשריים. אם זה מוצא כל שמצפין ל מחרוזת מוצפנת צפויה, זה יהיה תחזור סיסמא ש. וזה זה לא מוצא שום דבר, ולאחר מכן הוא יחזור, הדפסה שזה לא הצליחו למצוא שום דבר. עכשיו, שים לב שעל כל iterating מחרוזות אפשריות היא כנראה הולכת תיקח קצת זמן. בואו לראות איך בעצם זמן שלוקח. בואו נעשה את הסדק. ובכן, אופס - זה אומר לא מוגדר התייחסות לקריפטה. אז תזכור, למפרט ומגדיר עמ גם דף האדם לקריפטה שאנחנו צריך לקשר בקריפטה. עכשיו, כברירת המחדל לבצע פקודה לא יודע שאתה רוצה להשתמש בפונקציה זו. אז בואו להעתיק פקודת לקוח זה ורק להוסיף על הסוף שלו, המקשר קריפטה. עכשיו, זה הידור. אז בואו לרוץ סדק בניתן מחרוזת מוצפנת - כך קיסר. אז זה היה די מהר. שימו לב שזה הסתיים ב 13. ובכן, הסיסמה המוצפנת של הקיסר קורה להיות 13. אז בואו ננסה סיסמא אחרת. בואו ניקח מוצפן של הירשהורן סיסמא ולנסות לפצח את זה. אז שם לב שכבר הגיעו שלוש דמויות. ואנחנו iterating על זה בכלל אפשרי מחרוזות שלושה תווים. זה אומר שכבר לסיים iterating על כל אחד האפשרי ו שתי מחרוזות תווים. עכשיו, זה נראה כאילו זה הולך תיקח קצת זמן לפני שנגיע מחרוזות ארבעה תווים. זה עלול לקחת כמה דקות. זה לא לקח כמה דקות. אנחנו על המיתרים של ארבע הדמויות. אבל עכשיו, אנחנו צריכים לחזר על כל מחרוזות ארבע דמויות אפשריות, אשר שאולי עלול לקחת 10 דקות. ולאחר מכן כאשר אנו מגיעים לחמישה תווים מחרוזות, אנחנו צריכים לחזר על כל של אלה, אשר עשויים לוקח כמה שעות. ואנחנו צריכים לחזר על כל אפשרי שש מחרוזות תווים, אשר עלולים לקחת כמה ימים וכך הלאה. אז זה מאוד ארוך יכול לקחת את הפוטנציאל זמן לחזר על זה בכלל אפשרי מחרוזות פחות שמונה תווים ו. אז שם לב שזה לא בהכרח אלגוריתם יעיל מאוד למציאת סיסמא. אתה עשוי לחשוב כי יש דרכים טובות יותר. לדוגמה, zyx הסיסמה! 32ab ככל הנראה היא לא סיסמא נפוצה מאוד, בעוד שהסיסמה היא 12345 כנראה הרבה יותר נפוצה. אז דרך אחת מנסה למצוא את הסיסמה במהירות רבה יותר הוא רק כדי להסתכל בסיסמות, כי הם נפוצים יותר. כך למשל, אנו יכולים לנסות לקרוא את המילים ממילון ולנסות את כל אלה מילים כמו הניחושים הסיסמה שלנו. עכשיו, אולי סיסמא לא כל כך פשוט. אולי המשתמש היה חכם במקצת ונסה צירוף מספר כדי סוף המילה. אז אולי את הסיסמה שלהם הייתה password1. אז אתה יכול לנסות iterating על כל המילים במילון עם אחד מצורף בסוף שלו. ואז אולי אחרי עושה את זה, אתה לצרף שניים עד לסוף אותו. או אולי שהמשתמש מנסה להיות אפילו יותר חכם, והם רוצים סיסמא כדי להיות "האקר", אבל הם הולך להחליף את כל המופעים של דואר של עם שלשות. כך גם אתה יכול לעשות את זה. לחזר על כל המילים במילון אבל תחליף תווים ש נראה כמו מספרים עם המספרים האלה. אז ככה, אתה יכול לתפוס עוד יותר סיסמאות, כי הם נפוצים למדי. אבל בסופו של הדבר, הדרך היחידה שאתה יכול ללכוד את כל סיסמאות הוא בריון להכריח לחזר על כל מחרוזות אפשריות. אז בסופו של הדבר, אתה צריך לעשות כדי לחזר על כל המחרוזות מתו אחד שמונה תווים, אפשר שייקחו זמן רב מאוד, אבל אתה צריך לעשות את זה. שמי רוב באודן. וזה קראק.