Skip to content

Средство объединения, очистки и фильтрации огромных словарей паролей

License

Notifications You must be signed in to change notification settings

BlackF1re/DictionaryMerger

Repository files navigation

DictionaryMerger

DictionaryMerger — современное высокопроизводительное WPF-приложение для объединения, очистки и фильтрации огромных словарей паролей (до терабайта и более), с акцентом на удобство, гибкость и расширяемость.


Основные возможности

  • Объединение любых текстовых словарей (одна строка — один пароль)
  • Удаление дубликатов (гарантированная уникальность)
  • Работа с файлами любого размера (внешняя сортировка, потоковая обработка)
  • Пауза, продолжение, отмена процесса
  • Прогресс-бар, ETA, лог
  • Drag&Drop, сохранение/загрузка списка файлов
  • Гибкие фильтры (длина, регулярное выражение)
  • Автоматический и ручной размер чанка (адаптация под RAM)
  • Многоязычный интерфейс (локализация на XML, смена языка на лету)
  • Сохранение всех настроек (двусторонняя синхронизация UI <-> AppSettings)
  • Системные и пользовательские звуки (повтор, задержка, отключение)
  • Сохранение и загрузка тем оформления (JSON, мгновенное применение, обмен темами)
  • Память последней директории для всех диалогов
  • Диалог завершения с локализованным текстом и воспроизведением звука
  • Современный UX: все изменения применяются на лету, поддержка Visual Studio Designer

Архитектура и структура проекта

/DictionaryMerger
├── MainWindow.xaml, .cs         # Главное окно (UI)
├── UI/                         # Компоненты интерфейса (MainTab, SettingsTab)
├── Core/                       # Бизнес-логика, сервисы
│   ├── DictionaryMergerEngine.cs # Координатор объединения и сортировки
│   ├── InMemoryMerger.cs         # Быстрый in-memory алгоритм
│   ├── ExternalSortEngine.cs     # Внешняя сортировка для огромных файлов
│   ├── ChunkSorter.cs            # Сортировка и запись чанка на диск
│   ├── ChunkMerger.cs            # Слияние отсортированных чанков
│   ├── AppSettings.cs            # Класс настроек пользователя
│   └── LocalizationManager.cs    # Загрузка и контроль локализаций
├── Localization/               # Файлы локализации (en.xml, ru.xml, de.xml, fr.xml, es.xml, pt.xml, zh.xml, ja.xml, hi.xml)
├── Docs/README.md, readme.txt  # Документация

Механика высоконагруженной части (алгоритмы и параметры)

Алгоритмы объединения и сортировки

1. In-memory (RAM)

  • Используется для небольших и средних словарей (до ~10-20 ГБ, зависит от RAM).
  • Все строки читаются в память, фильтруются, сортируются и сохраняются в выходной файл.
  • Максимальная скорость, минимальное количество временных файлов.
  • Критерий выбора: если общий размер файлов <= свободной RAM, используется этот режим.

2. Внешняя сортировка (ExternalSortEngine)

  • Для огромных файлов, не помещающихся в память.
  • Механика:
    1. Chunking: исходные файлы читаются по частям (чанкам), каждая часть сортируется и сохраняется во временный файл.
    2. Параллелизм: сортировка чанков и их запись на диск выполняется с ограниченным параллелизмом (обычно N-1 потоков, где N — число ядер).
    3. Многократное слияние: отсортированные чанки сливаются в один итоговый файл с помощью k-way merge (fan-in обычно 8-32).
    4. Асинхронный прогресс и лог: все этапы логируются, прогресс рассчитывается по объёму обработанных данных.
  • Критерии выбора:
    • Если общий размер файлов > свободной RAM, используется внешний режим.
    • Можно принудительно выбрать режим через настройки (auto/in-memory/external).
  • Параметры:
    • chunkSizeMB — размер чанка (по умолчанию 512 МБ, можно изменить)
    • maxSortParallelism — число параллельных потоков сортировки (по умолчанию N-1)
    • maxMergeFanIn — число чанков, сливаемых за одну фазу (по умолчанию 16)

3. Фильтрация и уникальность

  • Фильтры по длине, регулярному выражению, кастомные фильтры.
  • Уникальность обеспечивается на этапе сортировки и слияния (дубликаты удаляются).

4. Логика выбора режима

  • Если включён "Force merge method" — используется выбранный режим.
  • Если выключен — auto: in-memory при достаточной RAM, иначе external.
  • В логах всегда указывается выбранный режим и параметры.

Механика локализации

  • Все строки интерфейса, логов, ошибок, предупреждений, MessageBox, тултипов, вкладок, кнопок, лейблов, групп, уведомлений и бизнес-логики переводимы.
  • Локализация хранится в XML-файлах (Localization/en.xml, ru.xml, de.xml, fr.xml, es.xml, pt.xml, zh.xml, ja.xml, hi.xml).
  • При первом запуске язык по умолчанию — английский.
  • После смены языка он сохраняется и применяется после перезапуска.
  • Для добавления языка — скопируйте en.xml, переведите, поместите в папку Localization.
  • Для удаления языка — удалите xml-файл (кроме ru/en).
  • Все изменения языка и локализации применяются на лету.

Примеры использования (C#)

InMemoryMerger

var merger = new InMemoryMerger();
int count = await merger.MergeAsync(
    new List<string> { "input1.txt", "input2.txt" },
    "output.txt",
    CancellationToken.None,
    line => line.Length >= 8, // фильтр
    Encoding.UTF8
);

ExternalSortEngine (для огромных файлов)

var engine = new ExternalSortEngine(
    maxSortParallelism: Math.Max(1, Environment.ProcessorCount - 1),
    maxMergeFanIn: 16,
    encoding: Encoding.UTF8,
    log: Console.WriteLine,
    progress: p => Console.WriteLine($"Progress: {p}%"),
    filter: line => true,
    chunkSizeMB: 512,
    token: CancellationToken.None
);
await engine.SortAndMergeAsync(
    new List<string> { "big1.txt", "big2.txt" },
    "output.txt"
);

Инструкция пользователя

  1. Запуск программы
    • Откройте exe-файл из папки релиза или запустите через Visual Studio.
  2. Добавление файлов
    • Нажмите "Добавить" и выберите один или несколько текстовых файлов.
    • Можно перетащить файлы мышкой в список.
  3. Настройка фильтров и параметров
    • Перейдите на вкладку "Настройки".
    • Установите минимальную/максимальную длину, регулярное выражение, кодировку, язык, тему, параметры звука и др.
    • Все изменения сохраняются автоматически.
  4. Объединение и очистка
    • Вернитесь на главную вкладку.
    • Нажмите "Объединить" — начнётся процесс, появится прогресс-бар и лог.
    • Можно поставить на паузу, продолжить или отменить.
  5. Завершение
    • После завершения появится панель с итогом, временем, кнопками "Открыть папку" и "Закрыть".
    • Пока панель открыта — воспроизводится выбранный сигнал.
  6. Работа с локализациями
    • Для смены языка — выберите нужный в настройках.
    • Для добавления языка — скопируйте xml-файл, переведите, поместите в папку Localization.
    • Для удаления языка — удалите xml-файл (кроме ru/en).
  7. Работа с темами оформления
    • Настройте цвета и шрифт на вкладке "Настройки".
    • Можно сохранять и загружать темы (JSON-файлы).
  8. Сохранение и загрузка списка файлов
    • Используйте кнопки "Сохранить список" и "Загрузить список" для работы с файлами .lst.

FAQ

Q: Как выбрать режим сортировки? A: В настройках можно включить "Force merge method" и выбрать auto/in-memory/external. По умолчанию auto.

Q: Как добавить новый язык? A: Скопируйте en.xml, переведите, поместите в папку Localization.

Q: Как работает фильтрация? A: Можно задать минимальную/максимальную длину, регулярное выражение, отключить фильтрацию длины.

Q: Как работает внешний режим? A: Файлы разбиваются на чанки, каждый сортируется и сохраняется на диск, затем чанки сливаются в один файл. Все этапы логируются.

Q: Какой язык будет при первом запуске? A: Английский. После смены язык сохраняется между сессиями.


Лицензия и вклад

  • Проект открыт для предложений и pull request.
  • Лицензия: MIT.
  • Для багрепортов и предложений — создайте issue на GitHub.

DictionaryMerger — ваш инструмент для работы с огромными словарями!

About

Средство объединения, очистки и фильтрации огромных словарей паролей

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published