Это сервис, который шифрует текст, делая побитовое исключающее "или" текста и последовательности псевдослучайных чисел.
Все вычисления проводятся у вас в браузере и никуда не передаются.
Это есть на GitHub Pages: https://batmaev.github.io/CryptoXOR
В теории, такое шифрование могло бы быть абсолютно стойким, так как в основе лежит шифр Вернама https://ru.wikipedia.org/wiki/Шифр_Вернама
-
"Одноразовый блокнот" полностью определяется короткой затравкой. Поэтому он не до конца произвольный, а в шифре Вернама он предполагается произвольным.
-
Прежде чем делать побитовый xor, нужно заменить буквы двоичными числами. А после преобразовать обратно в буквы.
Если каждая буква — это целое число из отрезка
[0, m]
, то xor не должен выводить число из этого отрезка, иначе мы не сможем выполнить обратное преобразование, и зашифрованное сообщение нельзя будет представить в виде букв. Если пользователю придётся вводить шифротекст с клавиатуры, то ему будет неудобно.К сожалению, число букв в алфавите не равно
2^k
ни для какого целогоk
. Поэтому приходится укорачивать случайное число до тех пор, пока не начнёт выполняться свойство про отрезок[0, m]
.Это сильно ограничивает алгоритм. В самом деле, для любых a и b выполняется, что число a
xor
b лежит между a - b и a + b.Из-за этого нет такого, что буква может перейти в любую другую. Чтобы шифрование оказалось отображением множества букв на себя (т.е. выполнялось свойство про отрезок
[0, m]
), мне пришлось ограничить генерируемые числа b: сделать их меньше 32. А всего разрешено 160 разных символов.Из-за этого после шифрования положение буквы в алфавите меняется не сильно. Например, маленькая русская буква, скорее всего, перейдёт в маленькую русскую букву.