आरओबी BOWDEN: मैं रोब हूँ, और के खुर मिलता है. तो pset कल्पना से याद है कि हम उपयोग करने की जरूरत करने जा रहे हैं तहखाना समारोह. आदमी पृष्ठ के लिए, हमारे पास दो हैश _xopensource परिभाषित. के बारे में चिंता मत करो क्यों हम ऐसा करने की जरूरत है. और भी हैश unistd.h शामिल हैं. उस रास्ते से बाहर है तो एक बार, चलो वास्तविक कार्यक्रम के लिए मिलता है. हम क्या करने की जरूरत है पहली बात बनाना है उपयोगकर्ता एक वैध एन्क्रिप्टेड प्रवेश किया कमांड लाइन पर पासवर्ड. कार्यक्रम माना जाता है कि याद रखें डॉट स्लेश दरार की तरह चलाने के लिए, और किया जाना है तब स्ट्रिंग एन्क्रिप्टेड. तो यहाँ हम यह सुनिश्चित करने के लिए जाँच कर रहे हैं हम चाहते हैं कि अगर दो के लिए कि argc कार्यक्रम के साथ जारी है. Argc दो नहीं है, तो वह या तो इसका मतलब उपयोगकर्ता एक एन्क्रिप्टेड दर्ज नहीं किया कमांड लाइन पर पासवर्ड, या वे बस एन्क्रिप्टेड से अधिक दर्ज किया कमांड लाइन पर पासवर्ड, जिसमें मामले में हम साथ क्या करना है पता नहीं है कमांड लाइन तर्क. Argc दो था तो, अगर हम जारी रख सकते हैं. और यहाँ, हम की घोषणा करने जा रहे हैं एक चर एन्क्रिप्टेड. वह सिर्फ मूल उर्फ ​​जा रहा है argv1 इतना है कि इस पूरे कार्यक्रम, हम यह argv1 फोन करने की जरूरत नहीं है तो आप सोचने के लिए है जो कि वास्तव में क्या मतलब के बारे में. तो अंत में, हम यह सत्यापित करना चाहते हैं एन्क्रिप्टेड पासवर्ड उपयोगकर्ता दर्ज किया वास्तव में हो सकता था एक एन्क्रिप्टेड पासवर्ड. तहखाना ऑफ द प्रति पृष्ठ, एन्क्रिप्टेड पासवर्ड 13 होना चाहिए वर्ण लंबा. यहाँ, हम परिभाषित हैश कि नोटिस 13 के रूप में लंबाई एन्क्रिप्ट. तो हम सिर्फ यकीन है कि कर रहे हैं एन्क्रिप्टेड की स्ट्रिंग की लंबाई पासवर्ड 13 है. अगर ऐसा नहीं है, हम चाहते हैं कार्यक्रम से बाहर निकलने के लिए. उस रास्ते से बाहर है तो, एक बार हम कर सकते हैं अब वास्तव में खोजने के लिए क्या करने की कोशिश एन्क्रिप्टेड दिया कि पासवर्ड पासवर्ड था. यहाँ, हम नमक हथियाना चाहते हैं एन्क्रिप्टेड पासवर्ड से. , आदमी प्रति पृष्ठ, याद रखें कि एक एन्क्रिप्टेड के पहले दो अक्षर स्ट्रिंग, यहां तरह - इतने पर 50ZPJ और - पहले दो अक्षर दे हमें इस्तेमाल किया गया था कि नमक तहखाना समारोह में. और यहाँ, हम नमक हा था कि देखते हैं. इसलिए हम पहले दो कॉपी करना चाहते हैं वर्ण, नमक लंबाई जा रहा हैश दो के रूप में परिभाषित किया. हम पहले दो अक्षर को कॉपी करने के लिए है इस सरणी में, नमक. हम नमक लंबाई आवश्यकता से अधिक ध्यान दें कि एक, हम अभी भी एक नल की जरूरत है हमारे नमक के अंत में टर्मिनेटर. तो फिर हम इस सरणी की घोषणा करने जा रहे हैं, अतिथि, आकार अधिकतम लंबाई के साथ साथ अधिकतम लंबाई हैश परिभाषित किया गया है, जहां एक, आठ के रूप में, के बाद से अधिकतम पासवर्ड आठ वर्ण लंबा है. और हम पुनरावृति करने के लिए इस का उपयोग करने के लिए जा रहे हैं सभी संभव तार पर कि सका मान्य पासवर्ड का हो. तो अगर एक पासवर्ड में मान्य वर्ण तो सिर्फ ए, बी, और सी, थे हम क, ख, ग से पुनरावृति होगा, ए.ए., बीए, सीए, और इतने पर, जब तक हम cccccccc देखने को मिलता है - आठ सी है. और हम एक वैध नीचे नहीं है अगर पासवर्ड, तो हम कहते हैं कि जरूरत एन्क्रिप्टेड स्ट्रिंग नहीं था साथ शुरू करने के लिए मान्य है. तो अब, हम इस समय 1 लूप तक पहुँचने. यह बात है इसका मतलब नोटिस एक अनंत लूप. कोई तोड़ बयान कर रहे हैं नोटिस इस अनंत लूप के अंदर. केवल वापसी बयान कर रहे हैं. इसलिए हम वास्तव में उम्मीद नहीं पाश बाहर निकलने के लिए. हम केवल कार्यक्रम से बाहर निकलने की उम्मीद है. मैं करने के लिए इस प्रिंट बयान जोड़ दिया है बस बाहर मुद्रित करने के लिए इस लूप के ऊपर क्या हमारे वर्तमान अनुमान क्या पासवर्ड है. अब, इस लूप क्या कर रहा है? यह सब संभव तार पर पाशन है कि मान्य पासवर्ड का हो सकता है. हम क्या करने जा रहे हैं, पहली बात है क्या के लिए हमारे वर्तमान अनुमान ले पासवर्ड है. हम से पकड़ा कि नमक ले जाऊँगा एन्क्रिप्टेड स्ट्रिंग, और हम कर रहे हैं अनुमान है कि एन्क्रिप्ट करने के लिए जा रहा है. यह हमें एक एन्क्रिप्टेड अनुमान दे देंगे, हम के खिलाफ तुलना करने के लिए जा रहे हैं जो एन्क्रिप्टेड स्ट्रिंग है कि उपयोगकर्ता कमांड लाइन में प्रवेश किया. वे, जो मामले में वही कर रहे हैं तुलनीय स्ट्रिंग, तो शून्य वापसी करेंगे वे वही कर रहे हैं, तो लगता था एन्क्रिप्टेड उत्पन्न कि पासवर्ड हम मुद्रित कर सकते हैं, जो मामले में स्ट्रिंग, कि हमारे पासवर्ड और वापसी के रूप में. लेकिन वे एक ही नहीं थे, कि हमारा अनुमान गलत था मतलब है. और हम करने के लिए पुनरावृति करना चाहते हैं अगले वैध अनुमान है. तो है कि क्या इस समय पाश करने की कोशिश कर रहा है. यह हमारा अनुमान पुनरावृति करने के लिए जा रहा है अगले वैध अनुमान है. जब हम कहते हैं कि सूचना है कि एक हमारे अनुमान में विशेष चरित्र है जो यहां अधिकतम प्रतीक, पहुँचे हैश के बाद से ध्यानपूर्वक, के रूप में परिभाषित किया गया है कि सबसे बड़ी ASCII मूल्य चरित्र है एक उपयोगकर्ता में प्रवेश कर सकते हैं कीबोर्ड, चरित्र पहुँचता है अधिकतम प्रतीक, तो हम भेजना चाहते हैं इसे वापस न्यूनतम प्रतीक को, जो फिर एक अंतरिक्ष, सबसे कम ASCII है मूल्य प्रतीक है कि एक उपयोगकर्ता कर सकते हैं कुंजीपटल पर दर्ज करें. इसलिए हम चाहते हैं कि सेट करने के लिए जा रहे हैं न्यूनतम प्रतीक है. और फिर हम जाने के लिए जा रहे हैं अगले चरित्र पर. तो कैसे हमारे अनुमान हैं पुनरावृति करने के लिए जा रहे हैं? खैर, वैध अक्षर ए, बी हैं, और सी, तो हम एक साथ शुरू किया था, तो यह यह हूँ, ख की पुनरावृति करेंगे सी के लिए पुनरावृति. सी हमारी अधिकतम प्रतीक है, इसलिए हम निर्धारित करेंगे ग पर वापस करने के लिए, कम से कम प्रतीक. और फिर हम सूचकांक पुनरावृति करेंगे अगले चरित्र को. मूल अनुमान ग था तो, तो अगले चरित्र अशक्त होने जा रहा है टर्मिनेटर. यहाँ नीचे, सूचना है कि अगर चरित्र अब हम चाहते हैं कि करने के लिए वेतन वृद्धि, अशक्त टर्मिनेटर था फिर हम इसे स्थापित करने के लिए जा रहे हैं न्यूनतम प्रतीक. अनुमान है कि ग था ऐसा है, तो हमारी नए अनुमान ए.ए. होने जा रहा है. और हमारी मूल अनुमान था अगर cccc, तो हमारे नए अनुमान AAAAA होने जा रहा है. हम अधिकतम स्ट्रिंग तक पहुँचने तो जब भी किसी दिए गए लंबाई की, तो हम कर रहे हैं न्यूनतम स्ट्रिंग को लागू करने के लिए जा रहा अगले लंबाई की, जो होगा बस सभी पात्रों का होना न्यूनतम प्रतीक. अब, यह चेक यहाँ क्या कर रहा है? खैर, सूचकांक आठवें से चले गए, तो नौ चरित्र को चरित्र - इसलिए हम के रूप में आठ सी जोड़ हमारे पिछले अनुमान है कि - फिर सूचकांक पर ध्यान केंद्रित करने जा रहा है हमारे अनुमान के अंतिम अशक्त टर्मिनेटर वास्तव में यह मतलब नहीं है जो सरणी, हमारे पासवर्ड में इस्तेमाल किया जा. हम चाहते हैं कि पिछले अशक्त करने पर ध्यान केंद्रित कर रहे हैं ताकि अगर टर्मिनेटर, तो हम एक नहीं मिला है सिर्फ आठ का उपयोग वैध है कि पासवर्ड कोई नहीं है, जिसका मतलब है वर्ण, encrypts कि वैध पासवर्ड दिए गए स्ट्रिंग के लिए. और हम कह, कि मुद्रित करने के लिए है हम एक मान्य नहीं मिल सकता है पासवर्ड, और वापसी. इसलिए इस समय पाश पुनरावृति करने के लिए जा रहा है सभी संभव तार पर. यह करने के लिए encrypts कि किसी भी पाता है उम्मीद एन्क्रिप्टेड स्ट्रिंग, यह हूँ उस पासवर्ड वापसी. और यह तो ठीक है, कुछ भी नहीं मिल रहा है यह मुद्रण, वापस आ जाएगी कि यह कुछ भी खोजने के लिए सक्षम नहीं था. अब, सूचना है कि सब कुछ खत्म पुनरावृति संभव तार शायद जा रहा है एक समय लग. वास्तव में देखते हैं कैसे लंबे समय लेता है. की दरार कर दूं. खैर, ओह - यह अपरिभाषित कहते हैं तहखाना करने के संदर्भ में है. पी सेट कल्पना और के लिए तो, याद भी तहखाना के लिए मैन पेज कि हम तहखाना में लिंक करने की जरूरत है. अब, मूलभूत कमांड बनाने पता नहीं है कि आप उस उस समारोह का उपयोग करना चाहते हैं. तो चलो इस ग्राहक आदेश की प्रतिलिपि जाने और सिर्फ अंत करने पर जोड़ तहखाना जोड़ने, इसके बारे में. अब, यह compiles. तो चलो एक दिया पर दरार चलाते हैं एन्क्रिप्टेड स्ट्रिंग - इसलिए कैसर. तो यह है कि बहुत तेजी से किया गया था. इस 13 को समाप्त हो गया नोटिस. खैर, कैसर एन्क्रिप्टेड पासवर्ड 13 होना होता है. तो चलो एक और पासवर्ड की कोशिश करते हैं. के Hirschhorn की एन्क्रिप्टेड लेते हैं पासवर्ड और उस खुर का प्रयास करें. तो हम पहले ही पहुँच चुके नोटिस तीन अक्षर. और हम सभी संभव पर iterating कर रहे हैं तीन चरित्र तार. यही कारण है कि हम पहले से ही खत्म कर दिया है इसका मतलब सभी संभव एक और अधिक पुनरावृति दो चरित्र तार. इस जा रहा है की तरह अब, ऐसा लगता है हम तक पहुंचने से पहले एक समय लग चार वर्ण स्ट्रिंग. यह कुछ मिनट लग सकते हैं. यह मिनट के एक जोड़े को नहीं ले गए थे. हम चार चरित्र तार पर हैं. लेकिन अब, हम सब से अधिक पुनरावृति करने की आवश्यकता संभव चार वर्ण स्ट्रिंग, जो हो सकता है कि 10 मिनट लग सकते हैं. और फिर हम पाँच चरित्र पर पहुँचने पर तार, हम सब से अधिक पुनरावृति करने की आवश्यकता उन में से, जो हो सकता है एक दो घंटे ले. और हम सभी संभव पर पुनरावृति करने की आवश्यकता छह चरित्र तार, जो इतने पर एक दो दिन में लेने और हो सकता है. तो यह एक संभावित बहुत लंबे समय ले सकता है सभी संभव पर पुनरावृति करने के लिए समय आठ चरित्र और कम तार. इसलिए यह जरूरी नहीं है कि सूचना के एक खोजने के लिए बहुत ही कुशल एल्गोरिथ्म एक पासवर्ड. तुम्हें पता है कि वहाँ लगता है कि शायद बेहतर तरीके से कर रहे हैं. उदाहरण के लिए, पासवर्ड ZYX! 32ab शायद एक बहुत ही आम पासवर्ड नहीं है, पासवर्ड 12345 है जबकि शायद एक बहुत अधिक सामान्य. एक पासवर्ड को खोजने की कोशिश की तो एक ही रास्ता और अधिक तेजी से बस देखने के लिए है अधिक आम हैं कि पासवर्ड्स पर. तो उदाहरण के लिए, हम शब्दों को पढ़ने के लिए कोशिश कर सकते हैं एक शब्दकोश से और सभी की कोशिश हमारे पासवर्ड अनुमान के रूप में उन शब्दों. अब, शायद एक पासवर्ड इतना आसान नहीं है. हो सकता है कि उपयोगकर्ता कुछ हद तक चालाक था और करने के लिए एक नंबर appending कोशिश किसी शब्द के अंत. तो शायद उनके पासवर्ड password1 गया था. तो तुम सभी शब्द पुनरावृति से अधिक प्रयास कर सकते हैं एक एक के साथ इस शब्दकोश में यह के अंत में जोड़ा. और फिर हो सकता है कि करने के बाद, आप हूँ यह अंत करने के लिए एक दो संलग्न. या हो सकता है उपयोगकर्ता करने की कोशिश कर रहा है और भी अधिक चतुर है, और वे चाहते हैं कि उनके पासवर्ड "हैकर" हो सकता है लेकिन वे कर रहे हैं करने के लिए ई के सभी उदाहरणों को बदलने के लिए जा रहा threes साथ. तो अगर आप भी ऐसा कर सकता है. शब्दकोश में सभी शब्द पर पुनरावृति लेकिन पात्रों की जगह उन लोगों की संख्या के साथ नंबर की तरह लग रही है. तो इस तरह, आप और भी अधिक पकड़ सकता है बहुत आम हैं कि पासवर्ड. लेकिन अंत में, आप कर सकते हैं एक ही रास्ता सभी पासवर्ड कब्जा जानवर है बल पर सभी पुनरावृति संभव तार. तो अंत में, आप पुनरावृति करने की जरूरत है एक वर्ण से सभी तारों के ऊपर ले सकता है जो आठ वर्ण, एक बहुत लंबे समय है, लेकिन आप यह सब करने की जरूरत है. मेरा नाम रोब बोडेन है. और इस दरार है.