И так... Начнём.
Всего байт 28=256.
Двубайтовых слов 216=256х256=65538.
(просто помните это)
1. Самый простой алгоритм шифрования использовали римляне:
они (в алфавите) сдвигали латиницу на фиксированное число позиций,
и заменяли символы в тексте на эти самые (сдвинутые) символы.
Как расшифровать такой шифр объяснять не стану.
(это - просто)
2. Другой (более сложный) способ: ключ=алфавит, в котором
символы перетасованы случайным образом.
Расшифровать такой текст (если он длинный) можно,
если известны вероятности, с которыми (обычно)
в тексте встречаются те или иные буквы.
3. Ещё более сложный алгоритм в котором один байт
заменяется на два байта.
Т.е., массив из 65536 двубайтовых слов
(случайным образом тасованный)
разбивается на 256 массивов
по 256 двубайтовых слов.
При шифровке одному байту будетсмоответствовать двубайтовое слово,
выбранное (случайным образом) из соответствующей ему группы.
(уже в этом алгоритме - один и тот же файл будет зашифрован
бесконечным числом вариантов)
При расшифровывании двубайтовое слово соотносится с группой,
которой оно принадлежит, а по номеру группы определяется
соответствующий символ.
Тут ещё есть (хотя... весьма и весьма) призрачная возможность
расшифровать текст, а вот в следующем алгоритме (даже призрачной)
возможности нет.
4. Мой алгоритм.
Он является объединением последних двух.
Т.е., ключ состоит из одного двубайтового ключа
(длиной 2х65536=131072 байт)
и 256 однобайтовых ключей (общая длина 65536 байт)
Общий размер файла/ключа = 196608 байт.