1. Forstå kilden og virkningen av dupliserte data
Først må vi forstå hvorfor så mange dupliserte data genereres. Under bygging av en ordbokfil kan data samles inn fra flere datakilder, og det er delvis overlapping mellom disse datakildene. For eksempel, når du samler inn data fra forskjellige ordlister, vanlige passordsett, forskjellige tegnkombinasjonslister, etc., kan noen grunnleggende ord eller enkle passordkombinasjoner eksistere i flere kilder.
Disse dupliserte dataene har mange negative effekter. Fra et lagringsperspektiv er plassen til 2T allerede veldig stor Hvis det er mye duplisert innhold i den, tilsvarer det sløsing med verdifull lagringsplass. Når du faktisk bruker denne ordbokfilen for passordknekking eller andre operasjoner, kan duplisert innhold føre til unødvendige søk-og sammenligningsoperasjoner. For eksempel, hvis algoritmen trenger å sammenligne innholdet i ordboken med målpassordet én etter én under passordknekking, vil duplisert innhold øke antall sammenligninger, og dermed bremse hele knekkeprosessen.
2. Filtreringsmetode basert på tekstbehandlingsverktøy
Bruk verktøy under Windows-systemet
-Bruk PowerShell
-I Windows-systemer gir PowerShell rike tekstbehandlingsfunksjoner. Vi kan bruke følgende PowerShell-skript for å fjerne dupliserte rader:
```powershell
$lines = get-content " dictionary.txt "
$uniqueLines = @ ()
foreach ($line i $lines) {
if ($uniquelines-notcontains $line) {
$uniqueLines + = $line
{
```
Dette skriptet leser først alle radene i "dictionary.txt" inn i en matrise "$lines". Deretter går hver linje gjennom en sløyfe, og hvis en linje ikke er i den nye matrisen "$ uniqueLines", legg den til den nye matrisen. Til slutt lagres innholdet i den nye matrisen til "unique_dictionary.txt".
Del og erobre algoritmen
-Siden ordbokfilene våre er veldig store (2T), kan direkte behandling støte på problemer som utilstrekkelig minne. Del-og-erobre-algoritmen kan løse dette problemet godt. Vi kan dele denne store filen i flere mindre underfiler. For eksempel kan vi dele det i henhold til et visst antall linjer eller filstørrelse.
-Gjenta deretter filtrering for hver underfil separat. Slå sammen de behandlede underfilene til en fil. Under sammenslåingsprosessen må du også sjekke om det er duplikat innhold igjen, da det kan være samme innhold mellom forskjellige underfiler.
4. Bekreft filtreringsresultatene
Etter å ha fullført gjentatt filtrering, må vi bekrefte at resultatene er korrekte. Du kan bruke noen enkle metoder, for eksempel å tilfeldig trekke noen linjer og sjekke antall ganger disse linjene forekommer i den opprinnelige filen og den filtrerte filen. Hvis det vises flere ganger i den opprinnelige filen og bare en gang i den filtrerte filen, er filtreringen gyldig.
I tillegg kan du sammenligne størrelsen på de originale og filtrerte filene. Hvis størrelsen på den filtrerte filen er betydelig mindre enn den opprinnelige filen, og den fungerer normalt i påfølgende tester (for eksempel å bruke denne ordbokfilen til å utføre en enkel passordsøketest for å se om den fungerer som den skal og ikke savner passordet som burde eksistere), kan det også indikere gjentatt filtrering Arbeidet har oppnådd gode resultater.
Serveren vår bruker 512G-minne og en høyhastighets NVMe-protokoll-harddiskserver. Det tok en halv måned å fullføre behandlingen, og vi fant ut et sett med effektive behandlingsskript kontakt nettstedets kundeservice for å kommunisere Filtrering av fallgruver som oppstår under gjentakelsesprosessen, og skriving av automatiske behandlingsskript!
Det er en utfordrende, men svært nødvendig oppgave å filtrere duplikat innhold i teksttype ordbokfiler for 2T. Ved å velge verktøy og algoritmer på en rimelig måte, kan vi effektivt fjerne duplisert innhold og forbedre kvaliteten og brukseffektiviteten til ordbokfiler, noe som er av stor betydning både i passordknekking og andre applikasjonsscenarier basert på denne ordbokfilen.