1. Розуміння джерела та впливу дублікатів даних
По-перше, ми повинні зрозуміти, чому так багато дублікатів даних. Під час створення файлу словника дані можуть бути зібрані з декількох джерел даних, і між цими джерелами даних є часткове перекриття. Наприклад, при зборі даних з різних списків слів, загальних наборів паролів, різних списків комбінацій символів тощо, деякі основні слова або прості комбінації паролів можуть існувати в декількох джерелах.
Ці повторювані дані матимуть багато несприятливих наслідків. З точки зору зберігання, простір 2T вже дуже великий, якщо в ньому багато повторюваного вмісту, це еквівалентно втраті дорогоцінного місця для зберігання. При фактичному використанні цього файлу словника для злому пароля або інших операцій повторюваний вміст може призвести до непотрібних операцій пошуку та порівняння. Наприклад, якщо під час злому пароля алгоритму потрібно порівняти вміст у словнику з цільовим паролем один за одним, повторюваний вміст збільшить кількість порівнянь, тим самим уповільнюючи весь процес злому.
2. Метод фільтрації на основі інструментів обробки тексту
Використовуйте інструменти під системами Windows
- Використовуйте PowerShell
- У системах Windows PowerShell надає багаті можливості обробки тексту. Ми можемо використовувати наступний сценарій PowerShell, щоб видалити дублікати рядків:
```powershell
$lines = Get - Content "dictionary.txt"
$uniqueLines = @()
foreach ($line in $lines) {
if ($uniqueLines - notcontains $line) {
```
Цей сценарій спочатку читає всі рядки в "dictionary.txt" у масив "$lines". Потім кожен рядок проходить циклом, і якщо рядок не знаходиться в новому масиві "$ uniqueLines", він додається до нового масиву. Нарешті, збережіть вміст нового масиву в "unique_dictionary.txt".
Алгоритм розділяй і володуй
- Оскільки файл нашого словника дуже великий (2T), пряма обробка може зіткнутися з такими проблемами, як недостатня пам'ять. Алгоритм розділяй і володуй добре вирішує цю проблему. Ми можемо розділити цей великий файл на кілька менших підфайлів. Наприклад, ми можемо розділити його за певною кількістю рядків або розміром файлу.
- Потім повторюється фільтрація кожного підфайлу окремо. Повторно об'єднайте оброблені підфайли в один файл. Під час процесу злиття вам також потрібно ще раз перевірити наявність дублікатів, оскільки однаковий вміст може існувати між різними підфайлами.
4. Перевірте результати фільтрації
Після завершення повторної фільтрації нам потрібно перевірити, чи результати правильні. Ви можете скористатися деякими простими методами, такими як випадковий вибір рядків і перевірка кількості випадків цих рядків у вихідному файлі та відфільтрованому файлі. Якщо він з'являється кілька разів у вихідному файлі і лише один раз у відфільтрованому файлі, фільтрація дійсна.
Крім того, ви можете порівняти розмір оригінального файлу та відфільтрованого файлу. Якщо розмір відфільтрованого файлу значно менший, ніж у вихідного файлу, і він працює нормально в наступних тестах (наприклад, використання цього файлу словника для простого тесту пошуку пароля, щоб перевірити, чи він працює належним чином і не пропускає пароля, який повинен існувати), це також можна пояснити Повторна робота з фільтрації досягла хороших результатів.
Наш сервер використовує пам'ять 512 ГБ і високошвидкісний сервер жорсткого диска з протоколом NVMe. Знадобилося півмісяця, щоб успішно завершити обробку, і ми знайшли набір ефективних сценаріїв обробки зв'яжіться зі службою підтримки клієнтів веб-сайту для спілкування та фільтрації. Підводні камені, на які ви наступаєте під час повторюваного процесу, а також написання сценаріїв автоматичної обробки!
Фільтрація дублікатів у файлі словника типів тексту 2T є складною, але дуже необхідною роботою. Розумно вибираючи інструменти та алгоритми, ми можемо ефективно видалити дублікати вмісту та покращити якість і ефективність використання словникових файлів, що має велике значення як у зломі паролів, так і в інших сценаріях застосування на основі цього словникового файлу.