📌 Общая характеристика модуля
Назначение: Сбор высококачественных случайных данных (энтропии) путем регистрации движений мыши пользователя. Такие данные критически важны для криптографических приложений, генерации ключей шифрования и прочих операций, требующих максимальной степени случайности.
Реализация: Модуль выполнен на языке Object Pascal (Delphi) и включает класс TMouseEntropyCollector, обеспечивающий удобный интерфейс для запуска процедуры сбора энтропии, её мониторинга и прерывания.
⚙️ Основные компоненты класса TMouseEntropyCollector
Конструктор и Деструктор
- Конструктор инициализирует внутренние структуры и проверяет начальное состояние системы.
- Деструктор освобождает выделенную память и очищает буферы, обеспечивая защиту конфиденциальных данных.
Основные Методы
CollectMouseEntropy: Запускает процесс сбора энтропии. Создается специальная форма, занимающая весь экран, которая становится прозрачной и незаметной для пользователя, но позволяет отслеживать любые движения мыши.
CancelCollection: Позволяет досрочно прервать процесс сбора данных.
AddToBuffer: Метод добавляет новые порции данных в накопительный буфер.
UpdateProgress: Отображает текущий прогресс сбора данных с указанием скорости и оставшегося времени.
IsEscapePressed: Контролирует возможность экстренного выхода из режима сбора энтропии по нажатию клавиши ESC.
🔍 Принцип работы механизма сбора энтропии
Процесс сбора энтропии реализуется следующим образом:
- Создание специальной формы: Формируется прозрачная форма, покрывающая весь экран компьютера. Эта форма предназначена исключительно для захвата событий мыши.
- Отслеживание движений мыши: Каждый раз, когда пользователь перемещает мышь, фиксируется разница между предыдущими и новыми координатами, а также точные моменты времени каждого движения.
- Запись данных в буфер: Информация о каждом движении сохраняется в специальном буфере. Данные включают:
- Изменения координат мыши (по осям X и Y),
- Высокоточные отметки времени каждого события,
- Состояние клавиш-модификаторов (Ctrl, Alt, Shift и др.)
- Мониторинг прогресса: Пользователь видит индикатор прогресса, отражающий объем уже собранных данных относительно необходимого количества.
- Завершение процесса: Процедура прекращается либо при достижении нужного объема данных, либо при ручном прерывании пользователем (нажатием клавиши
ESC).
✅ Особенности и преимущества подхода
- Высокая степень случайности: Используются реальные физические движения руки пользователя, что гарантирует высокую степень непредсказуемости полученных данных.
- Простота использования: Интерфейс интуитивно понятен и удобен для интеграции в приложения любого уровня сложности.
- Безопасность: Буфер очищается после окончания работы, минимизируя риск компрометации ранее собранных данных.
- Контроль процесса: Возможность контроля хода операции и оперативного прекращения сбора данных.
🛠 Возможные улучшения и рекомендации
Несмотря на качественную реализацию, существуют направления дальнейшего совершенствования:
- Дополнительная защита от сбоев: Рекомендуется реализовать обработку ошибок и аварийных ситуаций, возникающих при работе с низкоуровневыми функциями Windows.
- Расширенная статистика: Можно дополнить функциональность модулем статистики качества собранной энтропии (например, тестами на равномерность распределения).
- Поддержка альтернативных источников: Рассмотрение возможности расширения функционала добавлением поддержки иных источников энтропии (например, звуковые устройства, сетевые задержки и прочее).
Таким образом, представленный модуль является эффективным инструментом для надежного и качественного сбора энтропии, идеально подходящим для широкого круга криптографических и защищённых приложений.
📌 Общая характеристика модуля
Назначение: Сбор высококачественных случайных данных (энтропии) путем регистрации движений мыши пользователя. Такие данные критически важны для криптографических приложений, генерации ключей шифрования и прочих операций, требующих максимальной степени случайности.
Реализация: Модуль выполнен на языке Object Pascal (Delphi) и включает класс TMouseEntropyCollector, обеспечивающий удобный интерфейс для запуска процедуры сбора энтропии, её мониторинга и прерывания.
⚙️ Основные компоненты класса TMouseEntropyCollector
Конструктор и Деструктор
- Конструктор инициализирует внутренние структуры и проверяет начальное состояние системы.
- Деструктор освобождает выделенную память и очищает буферы, обеспечивая защиту конфиденциальных данных.
Основные Методы
CollectMouseEntropy: Запускает процесс сбора энтропии. Создается специальная форма, занимающая весь экран, которая становится прозрачной и незаметной для пользователя, но позволяет отслеживать любые движения мыши.
CancelCollection: Позволяет досрочно прервать процесс сбора данных.
AddToBuffer: Метод добавляет новые порции данных в накопительный буфер.
UpdateProgress: Отображает текущий прогресс сбора данных с указанием скорости и оставшегося времени.
IsEscapePressed: Контролирует возможность экстренного выхода из режима сбора энтропии по нажатию клавиши ESC.
🔍 Принцип работы механизма сбора энтропии
Процесс сбора энтропии реализуется следующим образом:
- Создание специальной формы: Формируется прозрачная форма, покрывающая весь экран компьютера. Эта форма предназначена исключительно для захвата событий мыши.
- Отслеживание движений мыши: Каждый раз, когда пользователь перемещает мышь, фиксируется разница между предыдущими и новыми координатами, а также точные моменты времени каждого движения.
- Запись данных в буфер: Информация о каждом движении сохраняется в специальном буфере. Данные включают:
- Изменения координат мыши (по осям X и Y),
- Высокоточные отметки времени каждого события,
- Состояние клавиш-модификаторов (Ctrl, Alt, Shift и др.)
- Мониторинг прогресса: Пользователь видит индикатор прогресса, отражающий объем уже собранных данных относительно необходимого количества.
- Завершение процесса: Процедура прекращается либо при достижении нужного объема данных, либо при ручном прерывании пользователем (нажатием клавиши
ESC).
✅ Особенности и преимущества подхода
- Высокая степень случайности: Используются реальные физические движения руки пользователя, что гарантирует высокую степень непредсказуемости полученных данных.
- Простота использования: Интерфейс интуитивно понятен и удобен для интеграции в приложения любого уровня сложности.
- Безопасность: Буфер очищается после окончания работы, минимизируя риск компрометации ранее собранных данных.
- Контроль процесса: Возможность контроля хода операции и оперативного прекращения сбора данных.
🛠 Возможные улучшения и рекомендации
Несмотря на качественную реализацию, существуют направления дальнейшего совершенствования:
- Дополнительная защита от сбоев: Рекомендуется реализовать обработку ошибок и аварийных ситуаций, возникающих при работе с низкоуровневыми функциями Windows.
- Расширенная статистика: Можно дополнить функциональность модулем статистики качества собранной энтропии (например, тестами на равномерность распределения).
- Поддержка альтернативных источников: Рассмотрение возможности расширения функционала добавлением поддержки иных источников энтропии (например, звуковые устройства, сетевые задержки и прочее).
Таким образом, представленный модуль является эффективным инструментом для надежного и качественного сбора энтропии, идеально подходящим для широкого круга криптографических и защищённых приложений.
📌 Общая характеристика модуля
Назначение: Сбор высококачественных случайных данных (энтропии) путем регистрации движений мыши пользователя. Такие данные критически важны для криптографических приложений, генерации ключей шифрования и прочих операций, требующих максимальной степени случайности.
Реализация: Модуль выполнен на языке Object Pascal (Delphi) и включает класс TMouseEntropyCollector, обеспечивающий удобный интерфейс для запуска процедуры сбора энтропии, её мониторинга и прерывания.
⚙️ Основные компоненты класса TMouseEntropyCollector
Конструктор и Деструктор
- Конструктор инициализирует внутренние структуры и проверяет начальное состояние системы.
- Деструктор освобождает выделенную память и очищает буферы, обеспечивая защиту конфиденциальных данных.
Основные Методы
CollectMouseEntropy: Запускает процесс сбора энтропии. Создается специальная форма, занимающая весь экран, которая становится прозрачной и незаметной для пользователя, но позволяет отслеживать любые движения мыши.
CancelCollection: Позволяет досрочно прервать процесс сбора данных.
AddToBuffer: Метод добавляет новые порции данных в накопительный буфер.
UpdateProgress: Отображает текущий прогресс сбора данных с указанием скорости и оставшегося времени.
IsEscapePressed: Контролирует возможность экстренного выхода из режима сбора энтропии по нажатию клавиши ESC.
🔍 Принцип работы механизма сбора энтропии
Процесс сбора энтропии реализуется следующим образом:
- Создание специальной формы: Формируется прозрачная форма, покрывающая весь экран компьютера. Эта форма предназначена исключительно для захвата событий мыши.
- Отслеживание движений мыши: Каждый раз, когда пользователь перемещает мышь, фиксируется разница между предыдущими и новыми координатами, а также точные моменты времени каждого движения.
- Запись данных в буфер: Информация о каждом движении сохраняется в специальном буфере. Данные включают:
- Изменения координат мыши (по осям X и Y),
- Высокоточные отметки времени каждого события,
- Состояние клавиш-модификаторов (Ctrl, Alt, Shift и др.)
- Мониторинг прогресса: Пользователь видит индикатор прогресса, отражающий объем уже собранных данных относительно необходимого количества.
- Завершение процесса: Процедура прекращается либо при достижении нужного объема данных, либо при ручном прерывании пользователем (нажатием клавиши
ESC).
✅ Особенности и преимущества подхода
- Высокая степень случайности: Используются реальные физические движения руки пользователя, что гарантирует высокую степень непредсказуемости полученных данных.
- Простота использования: Интерфейс интуитивно понятен и удобен для интеграции в приложения любого уровня сложности.
- Безопасность: Буфер очищается после окончания работы, минимизируя риск компрометации ранее собранных данных.
- Контроль процесса: Возможность контроля хода операции и оперативного прекращения сбора данных.
🛠 Возможные улучшения и рекомендации
Несмотря на качественную реализацию, существуют направления дальнейшего совершенствования:
- Дополнительная защита от сбоев: Рекомендуется реализовать обработку ошибок и аварийных ситуаций, возникающих при работе с низкоуровневыми функциями Windows.
- Расширенная статистика: Можно дополнить функциональность модулем статистики качества собранной энтропии (например, тестами на равномерность распределения).
- Поддержка альтернативных источников: Рассмотрение возможности расширения функционала добавлением поддержки иных источников энтропии (например, звуковые устройства, сетевые задержки и прочее).
Таким образом, представленный модуль является эффективным инструментом для надежного и качественного сбора энтропии, идеально подходящим для широкого круга криптографических и защищённых приложений.
📌 Общая характеристика модуля
Назначение: Сбор высококачественных случайных данных (энтропии) путем регистрации движений мыши пользователя. Такие данные критически важны для криптографических приложений, генерации ключей шифрования и прочих операций, требующих максимальной степени случайности.
Реализация: Модуль выполнен на языке Object Pascal (Delphi) и включает класс TMouseEntropyCollector, обеспечивающий удобный интерфейс для запуска процедуры сбора энтропии, её мониторинга и прерывания.
⚙️ Основные компоненты класса TMouseEntropyCollector
Конструктор и Деструктор
- Конструктор инициализирует внутренние структуры и проверяет начальное состояние системы.
- Деструктор освобождает выделенную память и очищает буферы, обеспечивая защиту конфиденциальных данных.
Основные Методы
CollectMouseEntropy: Запускает процесс сбора энтропии. Создается специальная форма, занимающая весь экран, которая становится прозрачной и незаметной для пользователя, но позволяет отслеживать любые движения мыши.
CancelCollection: Позволяет досрочно прервать процесс сбора данных.
AddToBuffer: Метод добавляет новые порции данных в накопительный буфер.
UpdateProgress: Отображает текущий прогресс сбора данных с указанием скорости и оставшегося времени.
IsEscapePressed: Контролирует возможность экстренного выхода из режима сбора энтропии по нажатию клавиши ESC.
🔍 Принцип работы механизма сбора энтропии
Процесс сбора энтропии реализуется следующим образом:
- Создание специальной формы: Формируется прозрачная форма, покрывающая весь экран компьютера. Эта форма предназначена исключительно для захвата событий мыши.
- Отслеживание движений мыши: Каждый раз, когда пользователь перемещает мышь, фиксируется разница между предыдущими и новыми координатами, а также точные моменты времени каждого движения.
- Запись данных в буфер: Информация о каждом движении сохраняется в специальном буфере. Данные включают:
- Изменения координат мыши (по осям X и Y),
- Высокоточные отметки времени каждого события,
- Состояние клавиш-модификаторов (Ctrl, Alt, Shift и др.)
- Мониторинг прогресса: Пользователь видит индикатор прогресса, отражающий объем уже собранных данных относительно необходимого количества.
- Завершение процесса: Процедура прекращается либо при достижении нужного объема данных, либо при ручном прерывании пользователем (нажатием клавиши
ESC).
✅ Особенности и преимущества подхода
- Высокая степень случайности: Используются реальные физические движения руки пользователя, что гарантирует высокую степень непредсказуемости полученных данных.
- Простота использования: Интерфейс интуитивно понятен и удобен для интеграции в приложения любого уровня сложности.
- Безопасность: Буфер очищается после окончания работы, минимизируя риск компрометации ранее собранных данных.
- Контроль процесса: Возможность контроля хода операции и оперативного прекращения сбора данных.
🛠 Возможные улучшения и рекомендации
Несмотря на качественную реализацию, существуют направления дальнейшего совершенствования:
- Дополнительная защита от сбоев: Рекомендуется реализовать обработку ошибок и аварийных ситуаций, возникающих при работе с низкоуровневыми функциями Windows.
- Расширенная статистика: Можно дополнить функциональность модулем статистики качества собранной энтропии (например, тестами на равномерность распределения).
- Поддержка альтернативных источников: Рассмотрение возможности расширения функционала добавлением поддержки иных источников энтропии (например, звуковые устройства, сетевые задержки и прочее).
Таким образом, представленный модуль является эффективным инструментом для надежного и качественного сбора энтропии, идеально подходящим для широкого круга криптографических и защищённых приложений.
📌 Общая характеристика модуля
Назначение: Сбор высококачественных случайных данных (энтропии) путем регистрации движений мыши пользователя. Такие данные критически важны для криптографических приложений, генерации ключей шифрования и прочих операций, требующих максимальной степени случайности.
Реализация: Модуль выполнен на языке Object Pascal (Delphi) и включает класс TMouseEntropyCollector, обеспечивающий удобный интерфейс для запуска процедуры сбора энтропии, её мониторинга и прерывания.
⚙️ Основные компоненты класса TMouseEntropyCollector
Конструктор и Деструктор
- Конструктор инициализирует внутренние структуры и проверяет начальное состояние системы.
- Деструктор освобождает выделенную память и очищает буферы, обеспечивая защиту конфиденциальных данных.
Основные Методы
CollectMouseEntropy: Запускает процесс сбора энтропии. Создается специальная форма, занимающая весь экран, которая становится прозрачной и незаметной для пользователя, но позволяет отслеживать любые движения мыши.
CancelCollection: Позволяет досрочно прервать процесс сбора данных.
AddToBuffer: Метод добавляет новые порции данных в накопительный буфер.
UpdateProgress: Отображает текущий прогресс сбора данных с указанием скорости и оставшегося времени.
IsEscapePressed: Контролирует возможность экстренного выхода из режима сбора энтропии по нажатию клавиши ESC.
🔍 Принцип работы механизма сбора энтропии
Процесс сбора энтропии реализуется следующим образом:
- Создание специальной формы: Формируется прозрачная форма, покрывающая весь экран компьютера. Эта форма предназначена исключительно для захвата событий мыши.
- Отслеживание движений мыши: Каждый раз, когда пользователь перемещает мышь, фиксируется разница между предыдущими и новыми координатами, а также точные моменты времени каждого движения.
- Запись данных в буфер: Информация о каждом движении сохраняется в специальном буфере. Данные включают:
- Изменения координат мыши (по осям X и Y),
- Высокоточные отметки времени каждого события,
- Состояние клавиш-модификаторов (Ctrl, Alt, Shift и др.)
- Мониторинг прогресса: Пользователь видит индикатор прогресса, отражающий объем уже собранных данных относительно необходимого количества.
- Завершение процесса: Процедура прекращается либо при достижении нужного объема данных, либо при ручном прерывании пользователем (нажатием клавиши
ESC).
✅ Особенности и преимущества подхода
- Высокая степень случайности: Используются реальные физические движения руки пользователя, что гарантирует высокую степень непредсказуемости полученных данных.
- Простота использования: Интерфейс интуитивно понятен и удобен для интеграции в приложения любого уровня сложности.
- Безопасность: Буфер очищается после окончания работы, минимизируя риск компрометации ранее собранных данных.
- Контроль процесса: Возможность контроля хода операции и оперативного прекращения сбора данных.
🛠 Возможные улучшения и рекомендации
Несмотря на качественную реализацию, существуют направления дальнейшего совершенствования:
- Дополнительная защита от сбоев: Рекомендуется реализовать обработку ошибок и аварийных ситуаций, возникающих при работе с низкоуровневыми функциями Windows.
- Расширенная статистика: Можно дополнить функциональность модулем статистики качества собранной энтропии (например, тестами на равномерность распределения).
- Поддержка альтернативных источников: Рассмотрение возможности расширения функционала добавлением поддержки иных источников энтропии (например, звуковые устройства, сетевые задержки и прочее).
Таким образом, представленный модуль является эффективным инструментом для надежного и качественного сбора энтропии, идеально подходящим для широкого круга криптографических и защищённых приложений.
📌 Общая характеристика модуля
Назначение: Сбор высококачественных случайных данных (энтропии) путем регистрации движений мыши пользователя. Такие данные критически важны для криптографических приложений, генерации ключей шифрования и прочих операций, требующих максимальной степени случайности.
Реализация: Модуль выполнен на языке Object Pascal (Delphi) и включает класс TMouseEntropyCollector, обеспечивающий удобный интерфейс для запуска процедуры сбора энтропии, её мониторинга и прерывания.
⚙️ Основные компоненты класса TMouseEntropyCollector
Конструктор и Деструктор
- Конструктор инициализирует внутренние структуры и проверяет начальное состояние системы.
- Деструктор освобождает выделенную память и очищает буферы, обеспечивая защиту конфиденциальных данных.
Основные Методы
CollectMouseEntropy: Запускает процесс сбора энтропии. Создается специальная форма, занимающая весь экран, которая становится прозрачной и незаметной для пользователя, но позволяет отслеживать любые движения мыши.
CancelCollection: Позволяет досрочно прервать процесс сбора данных.
AddToBuffer: Метод добавляет новые порции данных в накопительный буфер.
UpdateProgress: Отображает текущий прогресс сбора данных с указанием скорости и оставшегося времени.
IsEscapePressed: Контролирует возможность экстренного выхода из режима сбора энтропии по нажатию клавиши ESC.
🔍 Принцип работы механизма сбора энтропии
Процесс сбора энтропии реализуется следующим образом:
- Создание специальной формы: Формируется прозрачная форма, покрывающая весь экран компьютера. Эта форма предназначена исключительно для захвата событий мыши.
- Отслеживание движений мыши: Каждый раз, когда пользователь перемещает мышь, фиксируется разница между предыдущими и новыми координатами, а также точные моменты времени каждого движения.
- Запись данных в буфер: Информация о каждом движении сохраняется в специальном буфере. Данные включают:
- Изменения координат мыши (по осям X и Y),
- Высокоточные отметки времени каждого события,
- Состояние клавиш-модификаторов (Ctrl, Alt, Shift и др.)
- Мониторинг прогресса: Пользователь видит индикатор прогресса, отражающий объем уже собранных данных относительно необходимого количества.
- Завершение процесса: Процедура прекращается либо при достижении нужного объема данных, либо при ручном прерывании пользователем (нажатием клавиши
ESC).
✅ Особенности и преимущества подхода
- Высокая степень случайности: Используются реальные физические движения руки пользователя, что гарантирует высокую степень непредсказуемости полученных данных.
- Простота использования: Интерфейс интуитивно понятен и удобен для интеграции в приложения любого уровня сложности.
- Безопасность: Буфер очищается после окончания работы, минимизируя риск компрометации ранее собранных данных.
- Контроль процесса: Возможность контроля хода операции и оперативного прекращения сбора данных.
🛠 Возможные улучшения и рекомендации
Несмотря на качественную реализацию, существуют направления дальнейшего совершенствования:
- Дополнительная защита от сбоев: Рекомендуется реализовать обработку ошибок и аварийных ситуаций, возникающих при работе с низкоуровневыми функциями Windows.
- Расширенная статистика: Можно дополнить функциональность модулем статистики качества собранной энтропии (например, тестами на равномерность распределения).
- Поддержка альтернативных источников: Рассмотрение возможности расширения функционала добавлением поддержки иных источников энтропии (например, звуковые устройства, сетевые задержки и прочее).
Таким образом, представленный модуль является эффективным инструментом для надежного и качественного сбора энтропии, идеально подходящим для широкого круга криптографических и защищённых приложений.
///
/// Модуль для сбора энтропии с участием человека /// Автор: © Рудой Андрей Игоревич, 2005 - 2025 г. ///
/// © Рудой Андрей Игоревич unit MouseEntropyCollector; interface uses System.SysUtils, System.Classes, Vcl.Forms, Vcl.Controls, Vcl.ComCtrls, Winapi.Windows; type ///
/// Класс для сбора энтропии от движений мыши по всему экрану. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г. ///
TMouseEntropyCollector = class private FBuffer: TBytes; FTargetSize: Integer; FProgressBar: TProgressBar; FIsCollecting: Boolean; FStartTime: Cardinal; FLastMousePos: TPoint; FForm: TForm; // Форма для перехвата событий мыши ///
/// Обработчик движения мыши для формы. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г. ///
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); ///
/// Добавляет данные в буфер энтропии ///
procedure AddToBuffer(const Data; DataSize: Integer); ///
/// Обновляет отображение прогресса. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г. ///
procedure UpdateProgress; ///
/// Проверяет, была ли нажата клавиша ESC. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г. ///
function IsEscapePressed: Boolean; public ///
/// Создает экземпляр сборщика энтропии. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г. ///
constructor Create; ///
/// Освобождает ресурсы. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г. ///
destructor Destroy; override; ///
/// Собирает энтропию от движений мыши по всему экрану. Автор: © Рудой Андрей Игоревич, 2005 - 2025 г. ///
///Целевой размер буфера в байтах ///ProgressBar для отображения прогресса ///Выходной буфер с собранной энтропией /// /// Для работы создает прозрачную форму на весь экран для перехвата событий мыши /// procedure CollectMouseEntropy(Size: Integer; ProgressBar: TProgressBar; out Buffer: TBytes); ///
/// Прерывает сбор энтропии ///
procedure CancelCollection; end; implementation { TMouseEntropyCollector } constructor TMouseEntropyCollector.Create; begin inherited Create; FIsCollecting := False; SetLength(FBuffer, 0); FForm := nil; end; destructor TMouseEntropyCollector.Destroy; begin CancelCollection; if Assigned(FForm) then FForm.Free; // Безопасная очистка буфера if Length(FBuffer) > 0 then begin FillChar(FBuffer[0], Length(FBuffer), 0); SetLength(FBuffer, 0); end; inherited Destroy; end; procedure TMouseEntropyCollector.CollectMouseEntropy(Size: Integer; ProgressBar: TProgressBar; out Buffer: TBytes); var ScreenWidth, ScreenHeight: Integer; begin if Size <= 0 then raise Exception.Create('Размер буфера должен быть положительным числом'); if not Assigned(ProgressBar) then raise Exception.Create('ProgressBar должен быть назначен'); if FIsCollecting then raise Exception.Create('Сбор энтропии уже выполняется'); // Инициализация FTargetSize := Size; FProgressBar := ProgressBar; SetLength(FBuffer, 0); FIsCollecting := True; FStartTime := GetTickCount; // Получаем текущую позицию мыши if not GetCursorPos(FLastMousePos) then begin FIsCollecting := False; raise Exception.Create('Не удалось получить позицию мыши'); end; // Создаем невидимую форму на весь экран для перехвата событий мыши FForm := TForm.Create(nil); try FForm.BorderStyle := bsNone; FForm.FormStyle := fsStayOnTop; FForm.Visible := False; // Устанавливаем размер формы на весь экран ScreenWidth := GetSystemMetrics(SM_CXSCREEN); ScreenHeight := GetSystemMetrics(SM_CYSCREEN); FForm.SetBounds(0, 0, ScreenWidth, ScreenHeight); // Устанавливаем прозрачность и возможность клика сквозь форму FForm.AlphaBlend := True; FForm.AlphaBlendValue := 1; // Почти невидимая, но перехватывает события // Назначаем обработчик движения мыши FForm.OnMouseMove := FormMouseMove; // Показываем форму FForm.Show; // Настройка ProgressBar FProgressBar.Min := 0; FProgressBar.Max := FTargetSize; FProgressBar.Position := 0; // Основной цикл сбора while FIsCollecting and (Length(FBuffer) < FTargetSize) do begin Application.ProcessMessages; if IsEscapePressed then begin FIsCollecting := False; Break; end; Sleep(10); // Снижаем нагрузку на CPU end; finally if Assigned(FForm) then begin FForm.Hide; FForm.Free; FForm := nil; end; end; // Возвращаем результат if Length(FBuffer) >= FTargetSize then begin SetLength(Buffer, FTargetSize); Move(FBuffer[0], Buffer[0], FTargetSize); end else begin Buffer := Copy(FBuffer, 0, Length(FBuffer)); end; // Очищаем временные данные if Length(FBuffer) > 0 then begin FillChar(FBuffer[0], Length(FBuffer), 0); SetLength(FBuffer, 0); end; FIsCollecting := False; end; procedure TMouseEntropyCollector.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var CurrentPos: TPoint; DeltaX, DeltaY: SmallInt; MouseData: array[0..3] of Byte; HighPrecisionTime: Int64; TimeData: array[0..7] of Byte; GlobalX, GlobalY: Integer; begin if not FIsCollecting or (Length(FBuffer) >= FTargetSize) then Exit; // Получаем глобальные координаты мыши GetCursorPos(CurrentPos); GlobalX := CurrentPos.X; GlobalY := CurrentPos.Y; // Вычисляем разницу с предыдущей позицией :cite[1] DeltaX := GlobalX - FLastMousePos.X; DeltaY := GlobalY - FLastMousePos.Y; // Обновляем позицию :cite[8] FLastMousePos := CurrentPos; // Добавляем данные только при реальном движении :cite[1] if (DeltaX <> 0) or (DeltaY <> 0) then begin // Кодируем разницу координат (4 байта) MouseData[0] := Byte(DeltaX and $FF); MouseData[1] := Byte((DeltaX shr 8) and $FF); MouseData[2] := Byte(DeltaY and $FF); MouseData[3] := Byte((DeltaY shr 8) and $FF); AddToBuffer(MouseData, SizeOf(MouseData)); // Добавляем высокоточное время (8 байт) if QueryPerformanceCounter(HighPrecisionTime) then begin Move(HighPrecisionTime, TimeData[0], SizeOf(HighPrecisionTime)); AddToBuffer(TimeData, SizeOf(TimeData)); end; // Добавляем состояние клавиш-модификаторов (1 байт) AddToBuffer(Shift, 1); // Обновляем прогресс UpdateProgress; end; end; procedure TMouseEntropyCollector.AddToBuffer(const Data; DataSize: Integer); var OldLen: Integer; begin if not FIsCollecting or (DataSize <= 0) then Exit; // Проверяем, не превысим ли целевой размер if (Length(FBuffer) + DataSize) > FTargetSize then DataSize := FTargetSize - Length(FBuffer); if DataSize <= 0 then Exit; OldLen := Length(FBuffer); SetLength(FBuffer, OldLen + DataSize); Move(Data, FBuffer[OldLen], DataSize); end; procedure TMouseEntropyCollector.UpdateProgress; var CurrentSize: Integer; ElapsedTime: Cardinal; Speed: Double; begin if not Assigned(FProgressBar) then Exit; CurrentSize := Length(FBuffer); TThread.Synchronize(nil, procedure begin FProgressBar.Position := CurrentSize; ElapsedTime := GetTickCount - FStartTime; if ElapsedTime > 0 then begin Speed := CurrentSize / (ElapsedTime / 1000); FProgressBar.Hint := Format('Собрано: %d/%d байт' + sLineBreak + 'Скорость: %.2f байт/сек' + sLineBreak + 'Время: %.1f сек', [CurrentSize, FTargetSize, Speed, ElapsedTime / 1000]); end else begin FProgressBar.Hint := Format('Собрано: %d/%d байт', [CurrentSize, FTargetSize]); end; FProgressBar.Repaint; end ); end; function TMouseEntropyCollector.IsEscapePressed: Boolean; begin Result := (GetAsyncKeyState(VK_ESCAPE) and $8000) <> 0; end; procedure TMouseEntropyCollector.CancelCollection; begin FIsCollecting := False; end; end.
|