Створіть потоковий шифр MT19937 і зламайте його

Ви можете створити тривіальний потоковий шифр з будь-якого PRNG; використовуйте його для створення послідовності 8-бітних виходів і називайте ці виходи потоком ключів. XOR кожен байт відкритого тексту з кожним наступним байтом потоку ключів.

Напишіть функцію, яка робить це для MT19937, використовуючи 16-бітне початкове значення. Переконайтеся, що ви можете правильно шифрувати та дешифрувати. Цей код має бути схожим на ваш CTR-код.

Використовуйте свою функцію для шифрування відомого відкритого тексту (скажімо, 14 послідовних символів «А») із префіксом випадкової кількості випадкових символів.

З зашифрованого тексту відновіть «ключ» (16-бітне початкове число).

Використовуйте ту саму ідею, щоб створити випадковий «токен скидання пароля» за допомогою MT19937, заповненого поточним часом.

Напишіть функцію, щоб перевірити, чи будь-який заданий маркер пароля насправді є продуктом MT19937 PRNG, заповненого поточним часом.