Добрый вечер! Решил-таки рассказать о своей "вундрвафле", которую сподобился "выдумать" (на самом деле вспомнил на новый лад давно прочитанное и забытое). Получился блочный шифр в режиме CTR (режим гаммирования; со счётчиком). Область применения шифра: переписка, например, по электронной почте. То есть, там, где не требуется шифровать мегабиты в секунду, так как в качестве ГПСЧ взята хеш-функция SHA256 (но можно использовать и любую другую функцию, которая устойчива против атаки нахождения прообраза).
Порядок шифрования такой:
0) сжимаем открытый текст алгоритмом сжатия без потерь (Хаффмана, Шенона-Фано или каким-то другим).
1) вычисляем хеш сжатого текста и дописываем этот хеш в конце сжатого текста.
2) генерируем 256-битный одноразовый вектор инициализации (ВИ, синхропосылка) и записываем его в файл, где будет сохранён шифротекст.
3) дописываем ВИ _после_ (не перед, а именно _после_) длинной парольной фразы, которую ввёл пользователь.
4) хешируем сцепку из предыдущего пункта №3. Это будет начальное (нулевое) значение нашего 256-битного счётчика.
5) увеличиваем счётчик на единицу.
6) хешириуем новое значение счётчика, которое вычислили в предыдущем пункте №5.
7) складываем по модулю двойки (xor) 256-битный хеш, полученный в предыдущем пункте №6, с 256-битным блоком открытого текста.
8) записываем зашифрованый текст, полученый в предыдущем пункте №7, в файл (т.е., сразу после ВИ).
Для каждого блока открытого текста повторяем пункт с пятого по восьмой включительно. Если последний блок открытого текста меньше 256 бит, то 256-битную гамму, которая уже вычислена для него в пункте №6, "обрезаем" по фактической длине последнего неполного блока открытого текста.
9) по желанию в конец файла, в котором сохранён шифротекст, можно ещё дописать хеш шифротекста.
Требование к ВИ: если разные сообщения зашифровываются один и тем же постоянным паролем, то ВИ обязательно должен быть уникальным (неповторяющимся, одноразовым) для каждого сообщения.
Стойкость шифра сопоставима со стойкостью хеш-функции против атаки восстановления прообраза по известному хешу.