1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB אודן: אני רוב, ו בואו לקבל פיצוח. 3 00:00:15,890 --> 00:00:19,390 אז זוכר מהמפרט שpset אנחנו הולכים להיות צורך להשתמש 4 00:00:19,390 --> 00:00:20,890 פונקצית קריפטה. 5 00:00:20,890 --> 00:00:26,330 לדף האדם, יש לנו שתיים חשיש להגדיר _xopensource. 6 00:00:26,330 --> 00:00:28,290 אל תדאגו בקשר למה אנחנו צריכים לעשות את זה. 7 00:00:28,290 --> 00:00:31,550 וגם חשיש כולל unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> אז ברגע שיצא לדרך, בואו להגיע לתכנית בפועל. 9 00:00:35,920 --> 00:00:39,570 דבר הראשון שאנחנו צריכים לעשות הוא לוודא המשתמש נכנס לתוקף מוצפן 10 00:00:39,570 --> 00:00:41,520 סיסמא בשורת הפקודה. 11 00:00:41,520 --> 00:00:46,050 זכור כי התכנית אמורה להתנהל כמו סדק לוכסן נקודה, ו 12 00:00:46,050 --> 00:00:48,120 אז מחרוזת מוצפנת. 13 00:00:48,120 --> 00:00:52,990 >> אז הנה אנחנו בודקים כדי לוודא שargc לשתיים אם אנחנו רוצים 14 00:00:52,990 --> 00:00:54,380 תמשיך עם התכנית. 15 00:00:54,380 --> 00:00:58,830 אם argc הוא לא שתיים, זה אומר שגם המשתמש לא נכנס מוצפן 16 00:00:58,830 --> 00:01:02,560 סיסמא בשורת הפקודה, או שהם נכנס יותר מסתם מוצפן 17 00:01:02,560 --> 00:01:05,379 סיסמא בשורת הפקודה, שבו מקרה אנחנו לא יודעים מה לעשות עם 18 00:01:05,379 --> 00:01:07,660 טיעוני שורת הפקודה. 19 00:01:07,660 --> 00:01:11,390 >> אז אם argc היה שתיים, אנחנו יכולים להמשיך. 20 00:01:11,390 --> 00:01:14,160 והנה, אנחנו הולכים להכריז משתנה מוצפן. 21 00:01:14,160 --> 00:01:17,650 זה פשוט הולך לכינוי המקורי argv1 כך שבמשך כל הזמן הזה 22 00:01:17,650 --> 00:01:20,690 תכנית, אנחנו לא צריכים לקרוא לזה argv1, שאז אתה צריך לחשוב 23 00:01:20,690 --> 00:01:22,950 על מה זה אומר בעצם. 24 00:01:22,950 --> 00:01:27,180 >> אז סוף סוף, אנחנו רוצים לאמת כי סיסמא המוצפנת למשתמש 25 00:01:27,180 --> 00:01:30,840 נכנס היה יכול להיות באמת סיסמא מוצפנת. 26 00:01:30,840 --> 00:01:35,120 לדף איש קריפטה, סיסמא מוצפנת חייבת להיות 13 27 00:01:35,120 --> 00:01:36,440 תווים. 28 00:01:36,440 --> 00:01:41,500 עד כאן, שים לב שאנחנו חשיש מוגדר להצפין אורך כמו 13. 29 00:01:41,500 --> 00:01:46,140 אז אנחנו רק לוודא כי אורך מחרוזת של מוצפן 30 00:01:46,140 --> 00:01:49,090 סיסמא היא 13. 31 00:01:49,090 --> 00:01:52,280 >> ואם זה לא, אנחנו רוצים כדי לצאת מהתכנית. 32 00:01:52,280 --> 00:01:56,470 אז ברגע שיצאו לדרך, אנחנו יכולים עכשיו תנסה למצוא את מה שבעצם 33 00:01:56,470 --> 00:02:00,410 סיסמא שנתנה מוצפנים סיסמא הייתה. 34 00:02:00,410 --> 00:02:04,870 הנה, אנחנו רוצים לתפוס את המלח מהסיסמה המוצפנת. 35 00:02:04,870 --> 00:02:08,930 זכור, לכל האדם לעמוד, כי שני תווים הראשונים של מוצפן 36 00:02:08,930 --> 00:02:10,590 אוהב את המחרוזת, הנה - 37 00:02:10,590 --> 00:02:12,770 50ZPJ וכן הלאה - 38 00:02:12,770 --> 00:02:16,170 שני התווים הראשונים לתת שלנו מלח ששימש 39 00:02:16,170 --> 00:02:18,080 בפונקצית קריפטה. 40 00:02:18,080 --> 00:02:21,740 >> והנה, אנו רואים כי מלח היה חה. 41 00:02:21,740 --> 00:02:27,610 אז אנחנו רוצים להעתיק את שני הראשונים דמויות, אורך מלח להיות חשיש 42 00:02:27,610 --> 00:02:30,230 מוגדר כשתיים. 43 00:02:30,230 --> 00:02:35,970 יש לנו כדי להעתיק את שני התווים הראשונים למערך זה, מלח. 44 00:02:35,970 --> 00:02:39,340 שים לב שאנו צריכים אורך מלח בתוספת אחד, שכן אנחנו עדיין צריכים null 45 00:02:39,340 --> 00:02:42,440 שליחות קטלנית בסופו של המלח שלנו. 46 00:02:42,440 --> 00:02:46,940 >> ואז אנחנו הולכים להכריז על מערך זה, אורחים, אורך מקסימלי של גודל פלוס 47 00:02:46,940 --> 00:02:51,930 אחד, שבו אורך המקסימלי הוא חשיש מוגדר כשמונה, שכן הסיסמה המרבית 48 00:02:51,930 --> 00:02:55,090 הוא ארוך שמונה תווים. 49 00:02:55,090 --> 00:02:59,860 ואנחנו הולכים להשתמש בזה כדי לחזר על כל המיתרים האפשריים שיכול 50 00:02:59,860 --> 00:03:01,430 סיסמאות להיות תקפות. 51 00:03:01,430 --> 00:03:07,720 אז אם את התווים החוקיים בסיסמא היו רק A, B, ו-C, ולאחר מכן 52 00:03:07,720 --> 00:03:14,970 היינו לחזר על, B, C, AA, BA, CA, וכן הלאה, עד 53 00:03:14,970 --> 00:03:16,690 אנחנו זוכים לראות cccccccc - 54 00:03:16,690 --> 00:03:19,600 שמונה של ג. 55 00:03:19,600 --> 00:03:23,620 >> ואם אין לנו את תוקף סיסמא, ואז אנחנו צריכים להגיד את זה 56 00:03:23,620 --> 00:03:26,590 מחרוזת מוצפנת לא הייתה חוקי מלכתחילה. 57 00:03:26,590 --> 00:03:29,970 אז עכשיו, שנגיע לזה בזמן שהלולאה 1. 58 00:03:29,970 --> 00:03:33,100 שים לב שאומר שזה לולאה אינסופית. 59 00:03:33,100 --> 00:03:36,430 >> שים לב שאין הצהרת הפסקה בתוך הלולאה האינסופית הזה. 60 00:03:36,430 --> 00:03:38,570 יש לחזור הצהרות בלבד. 61 00:03:38,570 --> 00:03:41,210 אז אנחנו אף פעם לא מצפים באמת כדי לצאת מהלולאה. 62 00:03:41,210 --> 00:03:44,750 אנו מצפים רק כדי לצאת מהתכנית. 63 00:03:44,750 --> 00:03:48,220 אני הוספתי הצהרה בהדפסה כדי החלק העליון של לולאה זה פשוט להדפיס את 64 00:03:48,220 --> 00:03:51,790 מה הניחוש הנוכחי שלנו ב מה היא הסיסמה. 65 00:03:51,790 --> 00:03:53,630 >> עכשיו, מה עושה את זה לולאה? 66 00:03:53,630 --> 00:03:58,330 זה לולאה על כל המחרוזות האפשריות שיכולים להיות סיסמאות תקפות. 67 00:03:58,330 --> 00:04:02,700 הדבר הראשון שאנחנו הולכים לעשות הוא לקחת הניחוש הנוכחי שלנו עבור מה 68 00:04:02,700 --> 00:04:03,920 סיסמא היא. 69 00:04:03,920 --> 00:04:07,230 אנחנו ניקח את המלח שתפסנו מ המחרוזת המוצפנת, ואנחנו 70 00:04:07,230 --> 00:04:09,850 הולך להצפין את הניחוש. 71 00:04:09,850 --> 00:04:14,760 זה ייתן לנו ניחוש מוצפן, שאנחנו הולכים להשוואה מול 72 00:04:14,760 --> 00:04:18,810 המחרוזת המוצפנת שהמשתמש נכנס בשורת הפקודה. 73 00:04:18,810 --> 00:04:23,030 >> אם הם זהים, ובמקרה זה מחרוזת דומה תחזור לאפס, אם 74 00:04:23,030 --> 00:04:28,050 הם זהים, ולאחר מכן מניח היה סיסמא שנוצרה מוצפנים 75 00:04:28,050 --> 00:04:33,520 מחרוזת, במקרה שבו אנו יכולים להדפיס כי כסיסמה וחזרתנו. 76 00:04:33,520 --> 00:04:37,520 אבל אם הם לא היו אותו הדבר, כי משמעות הדבר היא הניחוש שלנו היה שגוי. 77 00:04:37,520 --> 00:04:43,250 >> ואנחנו רוצים לחזר ל הניחוש חוקי הבא. 78 00:04:43,250 --> 00:04:46,410 אז זה מה שהזמן הזה לולאה הוא מנסה לעשות. 79 00:04:46,410 --> 00:04:51,760 זה הולך לחזר הניחוש שלנו לניחוש חוקי הבא. 80 00:04:51,760 --> 00:04:56,080 שים לב שכאשר אנו אומרים כי יש אופי מסוים בניחוש שלנו 81 00:04:56,080 --> 00:05:01,770 הגיע לסמל מקס, שעד כאן הוא מוגדר כחשיש טילדה, שכן 82 00:05:01,770 --> 00:05:05,710 זה האופי של הערך הגדול ביותר ASCII שהמשתמש יכול להזין ב 83 00:05:05,710 --> 00:05:11,210 מקלדת, כאשר התו מגיעה מקסימום סמל, ואז אנחנו רוצים לשלוח 84 00:05:11,210 --> 00:05:17,150 אותו בחזרה לסמל המינימום, ש הוא מרחב, שוב ASCII הנמוך ביותר 85 00:05:17,150 --> 00:05:20,800 סמל ערך שיכול משתמש להיכנס במקלדת. 86 00:05:20,800 --> 00:05:22,940 >> אז אנחנו הולכים לקבוע כי לסמל המינימום. 87 00:05:22,940 --> 00:05:25,720 ואז אנחנו הולכים ללכת לתו הבא. 88 00:05:25,720 --> 00:05:28,730 אז איך הם הניחושים שלנו הולך לחזר? 89 00:05:28,730 --> 00:05:33,685 ובכן, אם את התווים החוקיים הם A, B, וג, אז אם התחלנו עם, 90 00:05:33,685 --> 00:05:36,630 זה יהיה לחזר לב, זה יהיה לחזר לג. 91 00:05:36,630 --> 00:05:44,360 ג הוא סמל המקסימום שלנו, כך יהיה לנו להגדיר ג חזרה ל, סמל המינימום. 92 00:05:44,360 --> 00:05:48,100 ואז לחזר מדד לתו הבא. 93 00:05:48,100 --> 00:05:53,920 >> אז אם הניחוש המקורי היה ג, הבא הדמות הולכת להיות null 94 00:05:53,920 --> 00:05:55,560 שליחות קטלנית. 95 00:05:55,560 --> 00:06:00,670 כאן למטה, שים לב שאם האופי כי עכשיו אנחנו רוצים 96 00:06:00,670 --> 00:06:04,690 תוספת הייתה שליחות קטלנית הריקה, אז אנחנו הולכים להגדיר אותו 97 00:06:04,690 --> 00:06:06,260 סמל מינימום. 98 00:06:06,260 --> 00:06:11,431 אז אם הניחוש היה C, אז הניחוש חדש הולך להיות aa. 99 00:06:11,431 --> 00:06:16,050 ואם הניחוש המקורי שלנו היה cccc, אז הניחוש שלנו החדש 100 00:06:16,050 --> 00:06:18,380 הולך להיות aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> אז בכל פעם שאנחנו מגיעים למחרוזת המרבית של אורך מסוים, אז אנחנו 102 00:06:24,430 --> 00:06:29,090 הולך ליישם למחרוזת המינימום של האורך הבא, יהיה אשר 103 00:06:29,090 --> 00:06:34,420 פשוט להיות כל התווים של סמל המינימום. 104 00:06:34,420 --> 00:06:36,970 עכשיו, מה הוא סימון זו עושה כאן? 105 00:06:36,970 --> 00:06:42,780 ובכן, אם המדד עבר משמיני תו לתו תשעה - 106 00:06:42,780 --> 00:06:46,460 לכן אנחנו מוסיפים שמונה C של כ הקודם שלנו לנחש - 107 00:06:46,460 --> 00:06:51,270 לאחר מכן מדד הולך להתמקד עברה null שליחות קטלנית של הניחוש שלנו 108 00:06:51,270 --> 00:06:57,990 מערך, שלא נועד למעשה ניתן להשתמש בסיסמה שלנו. 109 00:06:57,990 --> 00:07:03,530 >> אז אם אנחנו מתמקדים שבnull האחרון שליחות קטלנית, אז אנחנו לא מצאנו 110 00:07:03,530 --> 00:07:07,750 סיסמא שתקפה רק באמצעות שמונה דמויות, מה שאומר שאין 111 00:07:07,750 --> 00:07:10,550 סיסמא חוקית שמצפינה למחרוזת הנתונה. 112 00:07:10,550 --> 00:07:13,520 ואנחנו צריכים להדפיס את זה, ואמרו אנחנו לא הצלחנו למצוא את תוקף 113 00:07:13,520 --> 00:07:16,100 סיסמא, והחזרה. 114 00:07:16,100 --> 00:07:20,280 אז לולאה בזמן זה הולכת לחזר על כל המיתרים האפשריים. 115 00:07:20,280 --> 00:07:24,640 >> אם זה מוצא כל שמצפין ל מחרוזת מוצפנת צפויה, זה יהיה 116 00:07:24,640 --> 00:07:26,190 תחזור סיסמא ש. 117 00:07:26,190 --> 00:07:29,610 וזה זה לא מוצא שום דבר, ולאחר מכן הוא יחזור, הדפסה שזה 118 00:07:29,610 --> 00:07:31,910 לא הצליחו למצוא שום דבר. 119 00:07:31,910 --> 00:07:39,220 עכשיו, שים לב שעל כל iterating מחרוזות אפשריות היא כנראה הולכת 120 00:07:39,220 --> 00:07:40,420 תיקח קצת זמן. 121 00:07:40,420 --> 00:07:43,590 בואו לראות איך בעצם זמן שלוקח. 122 00:07:43,590 --> 00:07:47,230 >> בואו נעשה את הסדק. 123 00:07:47,230 --> 00:07:51,050 ובכן, אופס - זה אומר לא מוגדר התייחסות לקריפטה. 124 00:07:51,050 --> 00:07:55,330 אז תזכור, למפרט ומגדיר עמ גם דף האדם לקריפטה שאנחנו 125 00:07:55,330 --> 00:07:58,130 צריך לקשר בקריפטה. 126 00:07:58,130 --> 00:08:01,130 עכשיו, כברירת המחדל לבצע פקודה לא יודע שאתה 127 00:08:01,130 --> 00:08:03,010 רוצה להשתמש בפונקציה זו. 128 00:08:03,010 --> 00:08:09,680 >> אז בואו להעתיק פקודת לקוח זה ורק להוסיף על הסוף 129 00:08:09,680 --> 00:08:13,300 שלו, המקשר קריפטה. 130 00:08:13,300 --> 00:08:14,820 עכשיו, זה הידור. 131 00:08:14,820 --> 00:08:23,880 אז בואו לרוץ סדק בניתן מחרוזת מוצפנת - 132 00:08:23,880 --> 00:08:25,130 כך קיסר. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 אז זה היה די מהר. 135 00:08:30,790 --> 00:08:33,230 >> שימו לב שזה הסתיים ב 13. 136 00:08:33,230 --> 00:08:38,240 ובכן, הסיסמה המוצפנת של הקיסר קורה להיות 13. 137 00:08:38,240 --> 00:08:41,650 אז בואו ננסה סיסמא אחרת. 138 00:08:41,650 --> 00:08:45,830 בואו ניקח מוצפן של הירשהורן סיסמא ולנסות לפצח את זה. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> אז שם לב שכבר הגיעו שלוש דמויות. 141 00:08:55,110 --> 00:08:58,660 ואנחנו iterating על זה בכלל אפשרי מחרוזות שלושה תווים. 142 00:08:58,660 --> 00:09:01,420 זה אומר שכבר לסיים iterating על כל אחד האפשרי ו 143 00:09:01,420 --> 00:09:04,660 שתי מחרוזות תווים. 144 00:09:04,660 --> 00:09:09,180 עכשיו, זה נראה כאילו זה הולך תיקח קצת זמן לפני שנגיע 145 00:09:09,180 --> 00:09:10,580 מחרוזות ארבעה תווים. 146 00:09:10,580 --> 00:09:14,680 זה עלול לקחת כמה דקות. 147 00:09:14,680 --> 00:09:16,055 >> זה לא לקח כמה דקות. 148 00:09:16,055 --> 00:09:18,450 אנחנו על המיתרים של ארבע הדמויות. 149 00:09:18,450 --> 00:09:22,800 אבל עכשיו, אנחנו צריכים לחזר על כל מחרוזות ארבע דמויות אפשריות, אשר 150 00:09:22,800 --> 00:09:26,000 שאולי עלול לקחת 10 דקות. 151 00:09:26,000 --> 00:09:28,720 ולאחר מכן כאשר אנו מגיעים לחמישה תווים מחרוזות, אנחנו צריכים לחזר על כל 152 00:09:28,720 --> 00:09:31,450 של אלה, אשר עשויים לוקח כמה שעות. 153 00:09:31,450 --> 00:09:34,080 ואנחנו צריכים לחזר על כל אפשרי שש מחרוזות תווים, אשר 154 00:09:34,080 --> 00:09:36,560 עלולים לקחת כמה ימים וכך הלאה. 155 00:09:36,560 --> 00:09:41,380 >> אז זה מאוד ארוך יכול לקחת את הפוטנציאל זמן לחזר על זה בכלל אפשרי 156 00:09:41,380 --> 00:09:44,850 מחרוזות פחות שמונה תווים ו. 157 00:09:44,850 --> 00:09:50,600 אז שם לב שזה לא בהכרח אלגוריתם יעיל מאוד למציאת 158 00:09:50,600 --> 00:09:51,860 סיסמא. 159 00:09:51,860 --> 00:09:54,540 אתה עשוי לחשוב כי יש דרכים טובות יותר. 160 00:09:54,540 --> 00:10:02,230 לדוגמה, zyx הסיסמה! 32ab ככל הנראה היא לא סיסמא נפוצה מאוד, 161 00:10:02,230 --> 00:10:06,440 בעוד שהסיסמה היא 12345 כנראה הרבה יותר נפוצה. 162 00:10:06,440 --> 00:10:13,570 >> אז דרך אחת מנסה למצוא את הסיסמה במהירות רבה יותר הוא רק כדי להסתכל 163 00:10:13,570 --> 00:10:15,560 בסיסמות, כי הם נפוצים יותר. 164 00:10:15,560 --> 00:10:20,480 כך למשל, אנו יכולים לנסות לקרוא את המילים ממילון ולנסות את כל 165 00:10:20,480 --> 00:10:24,860 אלה מילים כמו הניחושים הסיסמה שלנו. 166 00:10:24,860 --> 00:10:29,210 עכשיו, אולי סיסמא לא כל כך פשוט. 167 00:10:29,210 --> 00:10:32,600 אולי המשתמש היה חכם במקצת ונסה צירוף מספר כדי 168 00:10:32,600 --> 00:10:34,220 סוף המילה. 169 00:10:34,220 --> 00:10:37,000 >> אז אולי את הסיסמה שלהם הייתה password1. 170 00:10:37,000 --> 00:10:41,520 אז אתה יכול לנסות iterating על כל המילים במילון עם אחד 171 00:10:41,520 --> 00:10:43,210 מצורף בסוף שלו. 172 00:10:43,210 --> 00:10:47,360 ואז אולי אחרי עושה את זה, אתה לצרף שניים עד לסוף אותו. 173 00:10:47,360 --> 00:10:50,240 >> או אולי שהמשתמש מנסה להיות אפילו יותר חכם, והם רוצים 174 00:10:50,240 --> 00:10:54,980 סיסמא כדי להיות "האקר", אבל הם הולך להחליף את כל המופעים של דואר של 175 00:10:54,980 --> 00:10:56,600 עם שלשות. 176 00:10:56,600 --> 00:10:58,440 כך גם אתה יכול לעשות את זה. 177 00:10:58,440 --> 00:11:02,100 לחזר על כל המילים במילון אבל תחליף תווים ש 178 00:11:02,100 --> 00:11:04,790 נראה כמו מספרים עם המספרים האלה. 179 00:11:04,790 --> 00:11:09,670 >> אז ככה, אתה יכול לתפוס עוד יותר סיסמאות, כי הם נפוצים למדי. 180 00:11:09,670 --> 00:11:14,690 אבל בסופו של הדבר, הדרך היחידה שאתה יכול ללכוד את כל סיסמאות הוא בריון 181 00:11:14,690 --> 00:11:17,340 להכריח לחזר על כל מחרוזות אפשריות. 182 00:11:17,340 --> 00:11:22,100 אז בסופו של הדבר, אתה צריך לעשות כדי לחזר על כל המחרוזות מתו אחד 183 00:11:22,100 --> 00:11:28,110 שמונה תווים, אפשר שייקחו זמן רב מאוד, אבל אתה צריך לעשות את זה. 184 00:11:28,110 --> 00:11:30,024 >> שמי רוב באודן. 185 00:11:30,024 --> 00:11:31,425 וזה קראק. 186 00:11:31,425 --> 00:11:36,533