ROB BOWDEN: Είμαι Rob, και ας πάρει ρωγμές. Έτσι, να θυμάστε από το spec το chipset που θα πάμε να χρειάζεται να χρησιμοποιήσετε την κρύπτη λειτουργία. Για τη σελίδα man, έχουμε δύο hash καθορίζουν _xopensource. Μην ανησυχείτε για τους οποίους πρέπει να το κάνουμε αυτό. Και, επίσης, hash περιλαμβάνουν unistd.h. Έτσι, τη στιγμή που είναι έξω από το δρόμο, ας φτάσουμε στο πραγματικό πρόγραμμα. Το πρώτο πράγμα που πρέπει να κάνετε είναι να βεβαιωθείτε ο χρήστης εισάγει ένα έγκυρο κρυπτογραφημένο κωδικό πρόσβασης από τη γραμμή εντολών. Να θυμάστε ότι το πρόγραμμα υποτίθεται να τρέχει σαν ρωγμή dot κάθετος, και τότε κρυπτογραφημένο string. Έτσι, εδώ είμαστε έλεγχο για να βεβαιωθείτε ότι argc σε δύο, αν θέλουμε να συνεχίσει το πρόγραμμα. Αν argc δεν είναι δύο, αυτό σημαίνει είτε ο χρήστης δεν εισάγετε ένα κρυπτογραφημένο κωδικό πρόσβασης από τη γραμμή εντολών, ή άρχισε περισσότερο από το κρυπτογραφημένο κωδικό πρόσβασης από τη γραμμή εντολών, στο οποίο περίπτωση που δεν ξέρουν τι να κάνουν με την τα επιχειρήματα της γραμμής εντολών. Έτσι, αν argc ήταν δύο, μπορούμε να συνεχίσουμε. Και εδώ, θα πάμε για να δηλώσει μια μεταβλητή κρυπτογραφημένα. Αυτό ακριβώς πρόκειται να alias το πρωτότυπο argv1 έτσι ώστε όλη αυτή η πρόγραμμα, δεν χρειάζεται να το ονομάσουμε argv1, το οποίο στη συνέχεια θα πρέπει να σκεφτείτε για το τι πραγματικά σημαίνει. Έτσι, τελικά, θέλουμε να επικυρώνει ότι το κρυπτογραφημένο κωδικό πρόσβασης του χρήστη άρχισε να έχουν όντως ένα κρυπτογραφημένο κωδικό πρόσβασης. Ανά την σελίδα man της κρύπτης, η κρυπτογραφημένο κωδικό πρόσβασης θα πρέπει να είναι 13 χαρακτήρες. Μέχρι εδώ, παρατηρούμε ότι έχουμε hash ορίζεται κρυπτογράφηση μήκους ως 13. Έτσι είμαστε κάνοντας απλά βεβαιωθείτε ότι το μήκος συμβολοσειράς του κρυπτογραφημένου κωδικός πρόσβασης είναι 13. Και αν δεν είναι, θέλουμε για να βγείτε από το πρόγραμμα. Έτσι, τη στιγμή που είναι έξω από το δρόμο, μπορούμε να τώρα πραγματικά να προσπαθήσουμε να βρούμε ποια είναι η κωδικό πρόσβασης που έδωσε το κρυπτογραφημένο κωδικός ήταν. Εδώ, θέλουμε να αρπάξει το αλάτι από τον κρυπτογραφημένο κωδικό πρόσβασης. Θυμηθείτε, σύμφωνα με την σελίδα man, ότι η δύο πρώτοι χαρακτήρες του ένα κρυπτογραφημένο string, όπως εδώ - 50ZPJ και ούτω καθεξής - οι δύο πρώτοι χαρακτήρες δίνουν μας το άλας που χρησιμοποιήθηκε στην κρύπτη λειτουργία. Και εδώ, θα δούμε ότι το αλάτι ήταν ha. Έτσι, θέλετε να αντιγράψετε τα δύο πρώτα χαρακτήρες, το μήκος αλάτι είναι hash που ορίζεται ως δύο. Πρέπει να αντιγράψετε τις δύο πρώτοι χαρακτήρες σε αυτή την σειρά, το αλάτι. Παρατηρήστε ότι χρειαζόμαστε μήκος αλάτι συν ένα, δεδομένου ότι εξακολουθούμε να χρειαζόμαστε ένα null τερματισμού στο τέλος του άλατος μας. Στη συνέχεια, θα πάμε να κηρύξει αυτό το array, πελατών, μήκους μέγιστο μέγεθος συν ένα, όταν μέγιστο μήκος είναι hash ορίζεται ως οκτώ, δεδομένου ότι η μέγιστη κωδικό είναι οκτώ χαρακτήρες. Και θα πάμε να χρησιμοποιήσετε αυτό για να επαναλάβει πάνω από όλες τις πιθανές χορδές που θα μπορούσε να είναι έγκυρη κωδικούς πρόσβασης. Έτσι, αν οι έγκυροι χαρακτήρες σε έναν κωδικό πρόσβασης ήταν απλά a, b, και c, τότε θα επαναλάβει πάνω α, β, γ, αα, BA, CA, και ούτω καθεξής, μέχρις ότου έχουμε την ευκαιρία να δούμε cccccccc - οκτώ Γ. Και αν δεν έχουμε κάτω από ένα έγκυρο κωδικό πρόσβασης, τότε θα πρέπει να πούμε ότι η κρυπτογραφημένη συμβολοσειρά δεν ήταν έγκυρο για να αρχίσει με. Έτσι τώρα, φτάνουμε αυτό, ενώ 1 βρόχο. Ανακοίνωση Αυτό σημαίνει ότι είναι ένα άπειρο βρόχο. Παρατηρήστε ότι δεν υπάρχουν break δήλωση εσωτερικό αυτού άπειρο βρόχο. Υπάρχουν επιστρέψει μόνο δηλώσεις. Έτσι, ποτέ δεν μπορούμε πραγματικά να αναμένουμε για να βγείτε από το βρόχο. Το μόνο που περιμένουμε να βγείτε από το πρόγραμμα. Έχω προσθέσει αυτή τη δήλωση εκτύπωσης για το αρχή αυτού του βρόχου απλά να εκτυπώσετε ποια είναι η τρέχουσα εικασία μας Τι είναι ο κωδικός πρόσβασης. Τώρα, τι είναι αυτό το βρόχο κάνει; Είναι looping πάνω από όλες τις πιθανές χορδές που θα μπορούσε να ισχύει κωδικούς πρόσβασης. Το πρώτο πράγμα που θα πάμε να κάνουμε είναι λάβει τρέχουσα εικασία μας για το τι την κωδικός πρόσβασης είναι. Θα πάρουμε το αλάτι που άρπαξε από το κρυπτογραφημένο string, και είμαστε πρόκειται να κρυπτογραφήσει το εικασία. Αυτό θα μας δώσει ένα κρυπτογραφημένο εικασία, που θα πάμε για να συγκρίνετε με η κρυπτογραφημένη συμβολοσειρά ότι ο χρήστης εγγράφονται στη γραμμή εντολών. Εάν είναι τα ίδια, οπότε εγχόρδων συγκρίσιμες θα επιστρέψει το μηδέν, αν ότι είναι το ίδιο, τότε υποθέτω ήταν η κωδικό πρόσβασης που δημιουργείται το κρυπτογραφημένο string, οπότε μπορούμε να τυπώσουμε ότι ως κωδικό πρόσβασης και την επιστροφή μας. Αλλά αν δεν ήταν το ίδιο, ότι σημαίνει εικασία μας ήταν εσφαλμένη. Και θέλουμε να μετακινηθείτε σε η επόμενη έγκυρη εικασία. Έτσι, αυτό είναι που αυτό ενώ βρόχο προσπαθεί να κάνει. Είναι πρόκειται να επαναλάβει εικασία μας στην επόμενη έγκυρη εικασία. Παρατηρήστε ότι όταν λέμε ότι ένα ιδιαίτερο χαρακτήρα στην εικασία μας έχει έφτασε το σύμβολο max, η οποία εδώ hash είναι ορίζεται ως μια περισπωμένη, δεδομένου αυτό είναι το μεγαλύτερο ASCII χαρακτήρα αξία ότι ένας χρήστης μπορεί να εισέλθει στο το πληκτρολόγιο, όταν ο χαρακτήρας φθάνει το max σύμβολο, τότε θέλουμε να στείλουμε υποστηρίξει στο ελάχιστο σύμβολο, το οποίο είναι ένας χώρος, και πάλι το χαμηλότερο ASCII Σύμβολο αξία που ένας χρήστης μπορεί να εισάγετε το πληκτρολόγιο. Έτσι θα πάμε για να ορίσετε ότι στο ελάχιστο σύμβολο. Και μετά θα πάμε για να πάει στο επόμενο χαρακτήρα. Λοιπόν, πώς είναι εικασίες μας πρόκειται να επαναλάβει; Λοιπόν, αν οι αποδεκτοί χαρακτήρες α, β, και c, στη συνέχεια, αν ξεκινήσαμε με ένα, αυτό θα επαναλάβει στο Β, θα επαναλάβει στο γ. c είναι max το σύμβολό μας, έτσι θα ορίσετε γ πίσω στο Α, η ελάχιστη σύμβολο. Και τότε θα επαναλάβει δείκτη στον επόμενο χαρακτήρα. Έτσι, αν η αρχική εικασία ήταν γ, η επόμενη χαρακτήρα πρόκειται να είναι η μηδενική τερματιστή. Εδώ κάτω, παρατηρήστε ότι εάν ο χαρακτήρας ότι θέλουμε τώρα να αύξηση ήταν η μηδενική τερματισμού, τότε θα πάμε να το ρυθμίσετε στο ελάχιστη σύμβολο. Έτσι, αν η εικασία ήταν c, τότε μας νέα εικασία πρόκειται να είναι αα. Και αν η αρχική εικασία μας ήταν γγγγ, τότε νέα εικασία μας πρόκειται να είναι aaaaa. Έτσι, κάθε φορά που έχουμε φτάσει το μέγιστο κορδόνι ενός δεδομένου μήκους, τότε είμαστε πρόκειται να εφαρμόσει στο ελάχιστο κορδόνι του επόμενου μήκους, η οποία θα απλά να είναι όλοι οι χαρακτήρες του η ελάχιστη σύμβολο. Τώρα, αυτό που είναι ο έλεγχος αυτός εδώ; Λοιπόν, αν Δείκτης κινήθηκε από την όγδοη χαρακτήρα στο χαρακτήρα εννέα - έτσι ώστε να προσθέσει οκτώ c ως προηγούμενο μας υποθέτω - τότε δείκτη πρόκειται να επικεντρωθεί στις Τελευταία null τερματισμού της εικασία μας συστοιχία, η οποία δεν έχει ως στόχο να πραγματικά να χρησιμοποιηθεί σε κωδικό μας. Έτσι, αν είμαστε συγκεντρωμένοι στην τελευταία null τερματισμού, τότε δεν έχουμε βρει ένα κωδικό πρόσβασης που χρησιμοποιείτε είναι έγκυρη μόνο οκτώ χαρακτήρων, το οποίο σημαίνει ότι δεν υπάρχει έγκυρο κωδικό πρόσβασης που κρυπτογραφεί με τη δεδομένη συμβολοσειρά. Και πρέπει να το τυπώσουν αυτό, λέγοντας δεν μπορέσαμε να βρούμε ένα έγκυρο τον κωδικό πρόσβασης, και την επιστροφή. Έτσι, αυτό το βρόχο, ενώ πρόκειται να επαναλάβει πάνω από όλες τις πιθανές χορδές. Αν διαπιστώσει οποιαδήποτε που κρυπτογραφεί με το αναμένεται κρυπτογραφημένα string, αυτό θα επιστρέφει αυτόν τον κωδικό πρόσβασης. Και δεν βρίσκεις τίποτα, τότε θα επιστρέψει, εκτύπωση ότι δεν ήταν σε θέση να βρει τίποτα. Τώρα, παρατηρούμε ότι η επανάληψη πάνω από όλα δυνατόν χορδές είναι κατά πάσα πιθανότητα πρόκειται να πάρει λίγο χρόνο. Ας πραγματικά να δείτε πώς καιρό ότι χρειάζεται. Ας κάνει κρακ. Λοιπόν, ουπς - λέει απροσδιόριστο αναφορά στην κρύπτη. Έτσι θυμηθείτε, για το p καθορίζει τις προδιαγραφές και Επίσης, η σελίδα man για την κρύπτη που πρέπει να συνδεθούν σε κρύπτη. Τώρα, η προεπιλεγμένη εντολή make δεν ξέρετε ότι θέλετε να χρησιμοποιήσετε τη λειτουργία αυτή. Έτσι, ας αντιγράψει αυτή την εντολή πελάτη και μόλις προσθέσετε στο τέλος από αυτό, που συνδέει κρύπτη. Τώρα, που καταρτίζει. Έτσι, ας τρέξει ρωγμή σε μια δεδομένη κρυπτογραφημένη σειρά - έτσι Καίσαρα. Έτσι, αυτό ήταν αρκετά γρήγορη. Σημειώστε ότι αυτή έληξε στις 13. Λοιπόν, κρυπτογραφημένο κωδικό πρόσβασης του Καίσαρα συμβαίνει να είναι 13. Οπότε ας προσπαθήσουμε άλλο κωδικό πρόσβασης. Ας ρίξουμε κρυπτογραφημένα Hirschhorn του κωδικό και δοκιμάστε πυρόλυση αυτό. Έτσι παρατηρήσετε έχουμε ήδη φτάσει τρεις χαρακτήρες. Και είμαστε επανάληψη σε όλους τους πιθανούς τριών χαρακτήρων χορδές. Αυτό σημαίνει ότι έχουμε ήδη τελειώσει επανάληψη σε κάθε δυνατή μία και δύο σειρές χαρακτήρων. Τώρα, μοιάζει με αυτό πρόκειται να πάρει λίγο πριν φτάσουμε στο τεσσάρων χαρακτήρων χορδές. Μπορεί να χρειαστούν μερικά λεπτά. Δεν πήρε μερικά λεπτά. Είμαστε στις τέσσερις χαρακτήρων χορδές. Αλλά τώρα, θα πρέπει να επαναλάβετε σε όλους δυνατόν τεσσάρων χαρακτήρων χορδές, οι οποίες που θα μπορούσε να πάρει ίσως και 10 λεπτά. Και στη συνέχεια, όταν φτάνουμε πέντε χαρακτήρων χορδές, θα πρέπει να επαναλάβετε σε όλους από αυτούς, που θα μπορούσε να λάβει μια-δυο ώρες. Και εμείς πρέπει να επαναλάβει όλες τις πιθανές έξι χαρακτήρων χορδές, οι οποίες Μπορεί να χρειαστούν μερικές ημέρες και ούτω καθεξής. Έτσι, θα μπορούσε να πάρει μια δυνητικά πολύ μεγάλη χρόνο για να μετακινηθείτε πάνω από όλες τις πιθανές οκτώ χαρακτήρα και λιγότερες χορδές. Έτσι παρατηρήσετε ότι αυτό δεν είναι απαραίτητα πολύ αποδοτικό αλγόριθμο για την εύρεση έναν κωδικό πρόσβασης. Μπορείτε να σκεφτείτε ότι υπάρχουν είναι καλύτερα τρόπους. Για παράδειγμα, η ZYX κωδικό πρόσβασης! 32AB κατά πάσα πιθανότητα δεν είναι μια πολύ κοινή κωδικό πρόσβασης, λαμβάνοντας υπόψη ότι ο κωδικός πρόσβασης είναι 12345 πιθανώς πολύ πιο κοινή. Έτσι, ένας τρόπος που προσπαθούν να βρουν έναν κωδικό πρόσβασης πιο γρήγορα είναι να εξετάσουμε μόνο σε κωδικούς πρόσβασης που είναι πιο συχνές. Έτσι, για παράδειγμα, μπορούμε να προσπαθήσουμε να διαβάσετε τα λόγια από ένα λεξικό και να δοκιμάσετε όλα Οι όροι αυτοί, όπως μαντεύει τον κωδικό μας. Τώρα, ίσως και έναν κωδικό πρόσβασης δεν είναι τόσο απλό. Ίσως ο χρήστης ήταν κάπως έξυπνο και προσπαθήστε να προσθέσετε έναν αριθμό σε το τέλος μιας λέξης. Έτσι, ίσως και τον κωδικό πρόσβασής τους ήταν password1. Έτσι, μπορείτε να δοκιμάσετε την επανάληψη πάνω από όλες τις λέξεις στο λεξικό με ένα προσαρτάται στο τέλος της. Και τότε ίσως μετά να κάνει αυτό, θα προσαρτήσει ένα δύο προς το τέλος της. Ή ίσως ο χρήστης προσπαθεί να είναι ακόμη πιο έξυπνος, και θέλουν τους κωδικό πρόσβασης για να "hacker", αλλά είναι πρόκειται να αντικαταστήσει όλες τις εμφανίσεις του ηλεκτρονικού με τριάρια. Έτσι, θα μπορούσατε να το κάνετε αυτό πάρα πολύ. Επαναλάβετε σε όλους λέξεις στο λεξικό αλλά να αντικαταστήσει χαρακτήρες που μοιάζουν με αριθμούς με αυτούς τους αριθμούς. Έτσι τον τρόπο αυτό, μπορεί να πιάσει ακόμα περισσότερο κωδικούς πρόσβασης που είναι αρκετά κοινό. Αλλά στο τέλος, ο μόνος τρόπος που μπορείτε να συλλάβει όλους τους κωδικούς πρόσβασης είναι η ωμή αναγκάσει επαναλάβετε σε όλους δυνατόν χορδές. Έτσι, στο τέλος, εσείς πρέπει να επαναλάβει σε όλες τις χορδές από έναν χαρακτήρα οκτώ χαρακτήρες, η οποία θα μπορούσε να λάβει μια πολύ μεγάλο χρονικό διάστημα, αλλά θα πρέπει να το κάνουμε. Το όνομά μου είναι Rob Bowden. Και αυτή είναι η ρωγμή.