>> ROB BOWDEN：我是搶奪和 讓我們開裂。
所以請記住，從PSET規範 我們要需要使用
crypt函數。
對於該男子頁面，我們有兩個 哈希定義_xopensource。
不要擔心，為什麼 我們需要做的。
哈希包括unistd.h中。
>> 所以一旦出的方式，讓 得到的實際方案。
我們需要做的第一件事是確保 用戶輸入一個有效的加密
在命令行中的密碼。
請記住，該方案應該 運行像點斜線裂縫，
然後加密的字符串。
>> 所以，我們在這裡檢查，以確保 ARGC如果我們想
繼續與程序。
如果argc是不是兩個，這意味著 用戶沒有輸入加密
在命令行中的密碼，或者他們 進入不僅僅是加密
在命令行中的密碼，其中 情況下，我們不知道做什麼用的
命令行參數。
>> 因此，如果ARGC是兩個，我們可以繼續進行。
而在這裡，我們要申報 一個可變的加密。
只是將原來的別名 argv1使整個
程序，我們不必叫它argv1， 然後你必須要考慮
關於這實際上意味著。
>> 所以最後，我們想要驗證 的加密的密碼的用戶
進入實際上已經 加密的密碼。
每地穴的手冊頁， 加密後的密碼必須是13
字符長。
在這裡，注意到我們哈希定義 加密長度為13。
所以我們要做的僅僅是確保 字符串長度的加密
密碼是13。
>> 而且，如果它不是，我們希望 退出程序。
所以一旦出的方式，我們可以 現在實際上是試圖找到什麼
加密後的密碼了 密碼。
在這裡，我們要搶鹽 從加密的密碼。
記住，每手冊頁 前兩個字符加密
字符串，喜歡這裡 -
50ZPJ等等 -
前兩個字符給 我們所使用的鹽
在隱窩功能。
>> 而在這裡，我們看到，鹽公頃。
所以，我們要複製前兩個 字符，鹽長度哈希
定義為兩個。
我們要複製前兩個字符 到這個數組，鹽。
請注意，我們需要鹽長度加上 一，因為我們仍然需要一個空
終結者結束時，我們的鹽。
>> 然後我們要宣布這個數組， 客人，尺寸最大長度加
1，最大長度為哈​​希定義 八，因為最大的密碼
是8個字符長。
我們要使用這個迭代 在所有可能的字符串，可以
有效的密碼。
因此，如果有效的密碼中的字符 只是一個，B，和c，然後
我們會遍歷A，B，C， AA，BA，CA，依此類推，直到
我們能看到CCCCCCCC -
8個C。
>> 如果我們沒有向下有效 密碼，然後我們需要說
加密後的字符串是不 有效的開始。
所以，現在，我們達到這個而1環。
請注意，這意味著它的 一個無限循環。
>> 注意有沒有break語句 裡面的這個無限循環。
只有return語句。
所以，我們從來沒有真正期望 退出循環。
我們只希望退出程序。
我已經添加print語句 這個循環的頂部剛剛打印出來
我們目前的猜測 密碼是什麼。
>> 現在，這個循環做？
它遍歷所有可能的字符串 這可能是有效的密碼。
我們要做的第一件事是 我們目前的猜測是什麼
密碼是。
我們將採取的鹽，我們抓住 加密後的字符串，我們很
要加密的猜測。
這將給我們一個加密的猜測， 我們要比較
加密後的字符串，用戶 在命令行中輸入。
>> 如果它們是相同的，在這種情況下， 字符串比較將返回0，如果
它們是相同的，那麼猜 生成的加密的密碼
字符串，在這種情況下，我們可以打印 作為我們的密碼和回報。
但是，如果他們不一樣的，那 意味著我們的猜測是不正確的。
>> 我們想要遍歷 下一個有效的猜測。
所以，這就是這一段時間 循環正在嘗試做的。
這將重申我們的猜測 到下一個有效的猜測。
請注意，當我們說一個 我們的猜測有特定字符
達到的最大象​​徵，在這裡 哈希定義為一個波浪線，因為
這是最大的ASCII值字符 用戶可以輸入上面的
鍵盤，當字符到達 最大的象徵，那麼，我們要發送
它備份的最小的符號，這 是一個空間，又是最低的ASCII碼
價值符號讓用戶能夠 從鍵盤輸入。
>> 因此，我們要集 的最小的符號。
然後，我們會去 到下一個字符。
那麼，如何是我們的猜測 要重複？
好吧，如果有效的字符是A，B， 和c，那麼我們就開始用，
它會遍歷到B，它會 遍歷到c。
c是我們最大的象徵，因此，我們將設置 C回，最低的象徵。
然後我們會遍歷索引 到下一個字符。
>> 因此，如果最初的猜測是c時，下一個 字符將是空
終止符。
這裡，請注意，如果該字符 我們現在要
增量是空終止， 然後我們將它設置為
最小的象徵。
因此，如果猜測是C，那麼，我們的 新的猜測將是一個。
而且，如果我們原來的猜測 CCCC，那麼我們的新猜測
將是AAAAA。
>> 因此，每當我們達到最大的字符串 給定長度，那麼我們
要實現的最小字符串 下一個的長度，這將
只是所有字符 最低的象徵。
現在，這個檢查在這裡幹什麼？
好吧，如果指數從第八 字符至9個字符 -
所以我們加8個C的 我們之前的猜測 -
那麼指數將會把重點放在 最後空終結我們的猜測
數組，它並不意味著實際上 用在我們的密碼。
>> 因此，如果我們集中在這最後的空 終結者，那麼我們還沒有找到一個
有效使用的密碼，只是八 字符，表示不存在
有效的加密的密碼 給定的字符串。
我們必須要打印，稱 我們無法找到一個有效的
密碼，然後返回。
所以這個while循環迭代 在所有可能的字符串。
>> 如果發現任何加密 預期加密的字符串，它會
返回該密碼。
它並沒有發現任何東西，然後 它將返回，印刷
是不是能找到什麼。
現在，請注意，在所有迭代 可能的字符串可能會
需要一段時間。
讓我們真正看到如何 長期需要。
>> 讓我們破解。
嗯，哎呀呀 - 說未定義 參考地穴。
所以請記住，對於p設置規範， 地穴的man頁面，我們
需要鏈接隱窩。
現在，默認的命令 不知道你
要使用該功能。
>> 因此，讓我們複製這個客戶端命令 只需添加到年底
連接地穴。
現在，它編譯。
因此，讓我們在一個給定的運行破解 加密後的字符串 -
所以撒的。
所以這是相當快的。
>> 請注意，這13結束。
那麼，凱撒的加密密碼 恰好是13。
因此，讓我們嘗試其他密碼。
讓我們赫塞豪恩的加密 密碼和嘗試開裂，。
>> 因此，我們注意到已經達到 三個字符。
我們遍歷所有可能 三個字符的字符串。
這意味著我們已經完成 遍歷所有可能的一個
兩個字符串。
現在，它看起來像這樣去 在我們到達之前，需要一段時間的
四個字符的字符串。
這可能需要一兩分鐘。
>> 它沒有採取一兩分鐘。
我們四個字符的字符串。
但是現在，我們需要遍歷所有 可能四個字符的字符串，這
也許可能需要10分鐘。
然後，當我們到達5個字符 字符串，我們需要遍歷所有
的那些，這可能 採取了幾個小時。
我們需要遍歷所有可能的 六個字符的字符串，這
可能需要幾天等等。
>> 因此，它可能需要很長的一個潛在的 遍歷所有可能
八字符和字符串較少。
因此，注意到，這不一定是 非常有效的算法尋找
輸入密碼。
你可能會認為 是更好的方法。
例如，密碼ZYX！32AB 可能不是一個很常見的密碼，
而密碼12345 可能很多較為常見。
>> 所以試圖找到一個密碼的方法之一 更快速的只是看
是比較常見的密碼。
因此，例如，我們可以嘗試讀單詞 從一本字典，並嘗試所有
這些話作為我們的密碼猜測。
現在，也許一個密碼 是不是很簡單。
用戶也許有點聰明 並嘗試附加一個數字
一個字的結尾。
>> 所以，也許他們的密碼為password1。
所以，你可以嘗試遍歷所有單詞 字典中的一個
追加到它的結束。
後話，說不定這樣做，你會 追加兩到它的結束。
>> 或者，也許用戶甚至試圖 更聰明，他們希望自己的
密碼是“黑客”，但他們 要更換電子商務的所有實例
三分球。
所以，你可以做到這一點。
遍歷所有單詞在字典 但替換的字符
這些數字看起來像數字。
>> 所以這種方式，你可能會趕上什至更多 密碼是很常見的。
但最終，只有這樣，你可以 捕獲所有密碼暴力破解
迫使遍歷所有 可能的字符串。
所以在最後，你需要遍歷 從一個字符的所有字符串
八個字符，這可能需要 很長一段時間，但你需要做到這一點。
>> 我叫羅布鮑登。
這是破解。