Ι. Κατανόηση της προέλευσης και των επιπτώσεων των επαναλαμβανόμενων δεδομένων
Καταρχάς, πρέπει να καταλάβουμε γιατί υπάρχουν τόσα πολλά επαναλαμβανόμενα δεδομένα. Κατά τη δημιουργία ενός λεξικού, ενδέχεται να συλλέγονται δεδομένα από διάφορες πηγές, οι οποίες έχουν κάποια αλληλεπικάλυψη. Για παράδειγμα, κατά τη συλλογή δεδομένων από διάφορες λίστες λέξεων, σύνολα συνηθισμένων κωδικών πρόσβασης και λίστες συνδυασμών χαρακτήρων, ορισμένες βασικές λέξεις ή απλές συνδυασμένες λέξεις ενδέχεται να υπάρχουν σε πολλές πηγές.
Τα επαναλαμβανόμενα δεδομένα έχουν πολλές δυσμενείς επιπτώσεις. Από την άποψη της αποθήκευσης, 2TB είναι ήδη ένας τεράστιος χώρος, και η ύπαρξη πολλών επαναλαμβανόμενων δεδομένων σημαίνει ότι χάνεται πολύτιμος χώρος αποθήκευσης. Κατά την πραγματική χρήση αυτού του λεξικού για την αποκρυπτογράφηση κωδικών πρόσβασης ή άλλες λειτουργίες, τα επαναλαμβανόμενα δεδομένα οδηγούν σε περιττές αναζητήσεις και αντιστοιχίσεις. Για παράδειγμα, εάν κατά την αποκρυπτογράφηση κωδικών πρόσβασης ο αλγόριθμος πρέπει να αντιστοιχίσει κάθε γραμμή του λεξικού με τον κωδικό πρόσβασης, τα επαναλαμβανόμενα δεδομένα αυξάνουν τον αριθμό των αντιστοιχίσεων, επιβραδύνοντας τη διαδικασία αποκρυπτογράφησης.
II. Μέθοδοι φιλτραρίσματος με εργαλεία επεξεργασίας κειμένου
- Χρησιμοποιώντας εργαλεία των Windows
- Το PowerShell παρέχει πλούσιες δυνατότητες επεξεργασίας κειμένου στα Windows. Μπορούμε να χρησιμοποιήσουμε τον ακόλουθο κώδικα PowerShell για την αφαίρεση διπλότυπων γραμμών:
```powershell
" "
foreach ($line in $lines) {
if ($uniqueLines -notcontains $line) {
}
}
}
$uniqueLines | Σετ - Περιεχόμενο "unique_dictionary.txt"
```
Αυτό το σενάριο διαβάζει πρώτα όλες τις γραμμές από το "dictionary.txt" σε μια σειρά "$lines". Στη συνέχεια, μέσω ενός βρόγχου περιηγείται σε κάθε γραμμή και εάν μια γραμμή δεν βρίσκεται στο νέο σύνολο "$uniqueLines", την προσθέτει σε αυτό το νέο σύνολο. Τέλος, αποθηκεύει το περιεχόμενο του νέου συνόλου στο "unique_dictionary.txt".
Αλγόριθμος διαίρεσης και κατάκτησης
- Επειδή το λεξικό μας είναι πολύ μεγάλο (2T), η άμεση επεξεργασία μπορεί να αντιμετωπίσει προβλήματα όπως έλλειψη μνήμης. Ο αλγόριθμος διαίρεσης και κατάκτησης μπορεί να λύσει αυτό το πρόβλημα πολύ καλά. Μπορούμε να χωρίσουμε αυτό το μεγάλο αρχείο σε πολλά μικρότερα υποαρχεία. Για παράδειγμα, μπορούμε να το διαιρέσουμε ανά ορισμένο αριθμό γραμμών ή μέγεθος αρχείου.
- Στη συνέχεια, εφαρμόζουμε φιλτράρισμα διπλότυπων σε κάθε υποαρχείο. Συγχωνεύουμε ξανά τα επεξεργασμένα υποαρχεία σε ένα αρχείο. Κατά τη συγχώνευση, χρειάζεται να ελέγξουμε ξανά εάν υπάρχουν διπλότυπα, καθώς μπορεί να υπάρχουν ίδια περιεχόμενα σε διαφορετικά υποαρχεία.
IV. Επαλήθευση των αποτελεσμάτων του φιλτραρίσματος
Αφού ολοκληρώσουμε το φιλτράρισμα διπλότυπων, χρειάζεται να επαληθεύσουμε τα αποτελέσματα. Μπορούμε να χρησιμοποιήσουμε κάποιες απλές μεθόδους, όπως η τυχαία επιλογή μερικών γραμμών και ο έλεγχος της συχνότητας εμφάνισής τους στο αρχικό και στο φιλτραρισμένο αρχείο. Εάν εμφανίζεται πολλές φορές στο αρχικό αρχείο και μόνο μία φορά στο φιλτραρισμένο, αυτό σημαίνει ότι το φιλτράρισμα έγινε σωστά.
Επιπλέον, μπορούμε να συγκρίνουμε το μέγεθος του αρχικού και του φιλτραρισμένου αρχείου. Εάν το μέγεθος του φιλτραρισμένου αρχείου είναι σημαντικά μικρότερο από το αρχικό και λειτουργεί κανονικά σε μεταγενέστερες δοκιμές (όπως η χρήση αυτού του λεξικού για απλή αναζήτηση κωδικών πρόσβασης και η επαλήθευση ότι δεν λείπουν κωδικοί πρόσβασης που θα έπρεπε να υπάρχουν), αυτό σημαίνει ότι η διαδικασία φιλτραρίσματος διπλότυπων έγινε με επιτυχία.
Η φιλτράριση των διπλότυπων σε ένα αρχείο κειμένου τύπου λεξικού 2TB είναι μια δύσκολη αλλά πολύ απαραίτητη εργασία. Με την κατάλληλη επιλογή εργαλείων και αλγορίθμων, μπορούμε να αφαιρέσουμε αποτελεσματικά τα διπλότυπα και να βελτιώσουμε την ποιότητα και την αποδοτικότητα χρήσης του λεξικού, τόσο για την αποκρυπτογράφηση κωδικών πρόσβασης όσο και για άλλες εφαρμογές που βασίζονται σε αυτό το λεξικό.