Крипточуваки - 24
Створіть потоковий шифр MT19937 і зламайте його
Ви можете створити тривіальний потоковий шифр з будь-якого PRNG; використовуйте його для створення послідовності 8-бітних виходів і називайте ці виходи потоком ключів. XOR кожен байт відкритого тексту з кожним наступним байтом потоку ключів.
Напишіть функцію, яка робить це для MT19937, використовуючи 16-бітне початкове значення. Переконайтеся, що ви можете правильно шифрувати та дешифрувати. Цей код має бути схожим на ваш CTR-код.
Використовуйте свою функцію для шифрування відомого відкритого тексту (скажімо, 14 послідовних символів «А») із префіксом випадкової кількості випадкових символів.
З зашифрованого тексту відновіть «ключ» (16-бітне початкове число).
Використовуйте ту саму ідею, щоб створити випадковий «токен скидання пароля» за допомогою MT19937, заповненого поточним часом.
Напишіть функцію, щоб перевірити, чи будь-який заданий маркер пароля насправді є продуктом MT19937 PRNG, заповненого поточним часом.