Шифр Вернама (одноразовый блокнот)

Напишите сообщение, нажмите кнопку — появится случайный ключ длиной с сообщение — и зашифруйте его по буквам или по байтам. Тот же ключ расшифровывает. Если ключ использовать один раз и хранить в секрете, шифротекст без него не прочитать.

Работать с
Действие
Букв не меньше, чем в сообщении. Прочие символы в ключе пропускаются.

Использовано символов ключа: 6.

Никогда не используйте ключ дважды: два сообщения с одним блокнотом можно прочитать вместе. Случайный ключ создаётся в этом браузере через crypto.getRandomValues.

Работает в браузере: всё, что вы вводите, никуда не отправляется.

Как пользоваться

  1. Выберите режим — буквы (классический блокнот) или байты — и действие.
  2. В режиме букв выберите алфавит; появится пример для него. На этой странице по умолчанию — русский алфавит из 33 букв с Ё.
  3. Введите сообщение и нажмите «Новый случайный ключ»: он создаст ровно столько символов ключа, сколько нужно сообщению.
  4. Скопируйте результат и ключ. Чтобы расшифровать, нажмите кнопку под результатом или переключите действие и вставьте шифротекст с тем же ключом.

Как это работает

  • Буквы: буквы алфавита нумеруются с нуля (А = 0, Б = 1 … Я = 32 в русском). Шифрование: C = (P + K) mod n; расшифровка: P = (C − K) mod n, где n — 33, 26 или 27. Строчные буквы становятся заглавными; Ё и Й — отдельные буквы алфавита.
  • Байты: сообщение берётся в UTF-8, каждый байт складывается по XOR с байтом ключа, шифротекст — hex. Расшифровка применяет XOR ещё раз и читает байты как UTF-8.
  • Ключ должен быть не короче сообщения; он используется с первого символа.

Пример

Сообщение ПРИВЕТ с ключом ЖУКМОЛ:

П Р И В Е Т
Сообщение 16 17 9 2 5 19
Ключ Ж 7 У 20 К 11 М 13 О 15 Л 12
Сумма mod 33 23 37 → 4 20 15 20 31
Шифротекст Ц Д У О У Ю

Результат — ЦДУОУЮ, использовано 6 символов ключа. Расшифровка ЦДУОУЮ ключом ЖУКМОЛ снова даёт ПРИВЕТ: Ц 23 − Ж 7 = 16 = П и так далее.

Классический пример на латинице — HELLO с ключом XMCKL — даёт EQNVZ.

Советы

  • Храните ключ отдельно от шифротекста: у кого есть оба, тот прочитает сообщение.
  • Уничтожайте использованный ключ: именно повторное использование губило реальные системы одноразовых блокнотов.
  • В режиме байтов обеим сторонам нужен один и тот же hex-ключ; передавайте его текстом, а не скриншотом.

Частые вопросы

Почему одноразовый блокнот невозможно взломать?

Если ключ по-настоящему случаен, длиной с сообщение, хранится в секрете и используется один раз, то для данного шифротекста все открытые тексты той же длины равновероятны. Это свойство — совершенную секретность — доказал Клод Шеннон в 1949 году.

Почему тогда его не используют везде?

Ключ должен быть длиной со все данные, которые вы когда-либо отправите, и заранее надёжно попасть к получателю. На практике это сложно, поэтому современные системы используют короткие ключи и шифры вроде AES.

Что происходит с пробелами и знаками препинания в режиме букв?

Они копируются без изменений и ключа не расходуют, поэтому в результате видны длины слов. Для настоящей секретности уберите пробелы и знаки препинания перед шифрованием, как делали пользователи блокнотов.

Можно ли пользоваться ключом из примера?

Нет: он напечатан на этой странице и виден всем. Для настоящего сообщения нажмите «Новый случайный ключ» и никогда не используйте ключ повторно.

Как создаётся случайный ключ?

Через crypto.getRandomValues — криптографический генератор случайных чисел браузера, без смещения по модулю. Ключ создаётся на вашем устройстве и никуда не отправляется.

Ещё в разделе «Разработчикам»

Все инструменты раздела: Разработчикам ·Обновлено 4 ноября 2026 г.

Настройки конфиденциальности

Google Analytics показывает нам, какими инструментами пользуются и работают ли они. Он может ставить cookie. Ваш выбор сохраняется в этом браузере.