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 우리는 플러스 소금 길이를 필요로하는 것을 알 수 우리는 여전히 널을해야하므로 하나, 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 최대 길이가 정의 된 해시 하나, 8 개 이후 최대 암호 48 00:02:51,930 --> 00:02:55,090 8 자입니다. 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 여덟 C의. 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 >> 더 break 문이없는주의 이 무한 루프 내부. 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 나는이 print 문을 추가했습니다 이 루프의 상단은 인쇄하기 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 >> 그들은 동일한 경우이 경우에 비교 문자열, 경우 0을 반환합니다 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 경우 C는, 우리는,로 시작하는 경우 90 00:05:33,685 --> 00:05:36,630 그것은 B를 반복합니다, 그것은거야 C를 반복. 91 00:05:36,630 --> 00:05:44,360 C는 우리의 최대 상징이다, 그래서 우리는 설정합니다 다시 C, 최소 기호. 92 00:05:44,360 --> 00:05:48,100 그리고 우리는 색인을 반복합니다 다음 문자. 93 00:05:48,100 --> 00:05:53,920 >> 원래의 추측은 C, 그 다음이었다 그래서 만약 문자는 널 (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 증가는 널 (NULL) 종료했다 그 후에 우리는 그것을 설정하는거야 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 그래서 while 루프는 반복하는 것입니다 가능한 모든 문자열에. 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 이제, 통지 된 모든 반복 가능한 문자열은 아마도가는 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 p는 명세를 설정하고를 위해, 그래서 기억 토굴에도 man 페이지가 우리 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 의는 Hirschhorn의 암호​​화를 보자 암호 부수기보십시오. 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 우리는 가능한 모든 반복하고 세 문자로 된 문자열. 142 00:08:58,660 --> 00:09:01,420 그것은 우리가 이미 완료 한 것을 의미합니다 가능한 모든 하나를 통해 반복하고 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 8 자와 적은 문자열. 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 그래서 당신은 모든 단어를 통해 반복 시도 할 수 있습니다 한 사전 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 걸릴 수 있습니다 8 자, 아주 긴 시간,하지만 당신은 그것을 할 필요가있다. 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