Генератор случайных строк Base64

Создавайте случайные строки Base64 с помощью криптографически стойкого генератора случайных чисел вашего браузера. Задайте длину в байтах или символах, генерируйте до 1000 строк за раз и выберите стандартный вариант или безопасный для URL.

Работает полностью в браузере. Данные никуда не загружаются.

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

  1. Задайте длину и выберите в параметре «Единица длины», что она обозначает: «Байты случайных данных» или «Символы» Base64. Для ключа используйте байты: 32 байта — это 256-битный ключ.
  2. Укажите в поле «Количество», сколько строк вам нужно, и выберите «Разделитель» между ними: перевод строки, запятую или пробел.
  3. В параметре «Вариант» выберите «Стандартный (RFC 4648)» или «Безопасный для URL (RFC 4648 §5)». При единице «Байты случайных данных» можно также отключить «Дополнение», если целевая система не ожидает знаков =.
  4. Нажмите «Сгенерировать», чтобы получить новые значения, а затем «Копировать всё» или «Скачать», чтобы сохранить список.

Байты, символы и энтропия

Стойкость случайной строки измеряется в битах энтропии. Каждый случайный байт добавляет 8 бит, поэтому 16 байт дают 128 бит, а 32 байта — 256 бит. Base64 меняет лишь способ записи этих байтов: каждый символ несёт 6 бит, и каждые 3 байта превращаются в 4 символа. Инструмент показывает энтропию каждой строки, так что её можно оценить с первого взгляда.

В режиме «Байты случайных данных» результат декодируется ровно в указанное число случайных байтов — именно это нужно для ключей и секретов. В режиме «Символы» вы получаете точное число символов, каждый из которых равновероятно выбирается из 64-символьного алфавита; используйте этот режим, когда система требует токен фиксированной длины и хранит его как текст.

БайтыСимволы Base64ЭнтропияТипичное применение
121696 битNonce (IV) для AES-GCM
1624 (22 без дополнения)128 битСоли, токены сессий и CSRF, ключи AES-128
3244 (43 без дополнения)256 битКлючи AES-256 и HMAC-SHA256, секреты HS256, API-ключи
6488 (86 без дополнения)512 битКлючи HMAC-SHA512, секреты HS512

Где используются случайные значения Base64

  • Секреты JWT. RFC 7518 требует, чтобы ключ HMAC был не короче результата хеш-функции: 32 байта для HS256, 48 для HS384 и 64 для HS512. Одни библиотеки используют строку секрета как есть, другие сначала декодируют её из Base64, поэтому проверьте, чего ожидает ваша. Декодер JWT проверяет подписи от HS256 до HS512 с секретом любого из этих видов, а генератор HMAC принимает ключ в виде текста, hex или Base64.
  • Ключи приложений. Например, Laravel хранит 32-байтовый ключ шифрования в файле .env в виде APP_KEY=base64:... — в том же формате, что и 32-байтовая строка из этого инструмента.
  • Секреты Kubernetes. Значения в разделе data должны быть стандартным Base64 с дополнением. Строку, сгенерированную в режиме байтов со стандартным вариантом и включённым дополнением, можно поместить туда напрямую, и под (Pod) получит исходные случайные байты. Если приложению нужен сам текст Base64, поместите его в раздел stringData.
  • Токены в URL. Ссылки для сброса пароля, коды приглашений и другие токены, которые передаются в URL, должны использовать вариант, безопасный для URL: в нём + и / заменены на - и _. Подробнее см. на странице Base64URL.

Почему криптографически стойкий генератор, а не Math.random

Math.random() — быстрый генератор общего назначения. Его результат не рассчитан на непредсказуемость, и в некоторых движках внутреннее состояние можно восстановить по нескольким значениям. Этот инструмент использует crypto.getRandomValues() — криптографически стойкий генератор, который получает начальное значение от операционной системы. Источник того же типа используют openssl rand и модуль secrets в Python. Значения создаются на вашем устройстве, никуда не отправляются и нигде не сохраняются.

Генерация случайного Base64 в коде

# Командная строка: 32 случайных байта в Base64 (44 символа)
openssl rand -base64 32
head -c 32 /dev/urandom | base64

# Python
import base64, secrets
base64.b64encode(secrets.token_bytes(32)).decode()
secrets.token_urlsafe(32)        # безопасно для URL, без дополнения, 43 символа

// Node.js
const crypto = require('crypto');
crypto.randomBytes(32).toString('base64');
crypto.randomBytes(32).toString('base64url');   // безопасно для URL, без дополнения

// Браузер
const bytes = crypto.getRandomValues(new Uint8Array(32));
btoa(String.fromCharCode(...bytes));

Часто задаваемые вопросы

Какой длины должен быть случайный ключ или секрет?

16 байт (128 бит) достаточно для значений, которые должны быть лишь уникальными и такими, чтобы их невозможно было угадать: идентификаторов сессий, токенов CSRF и солей. Для ключей AES-256, ключей HMAC-SHA256 и секретов HS256 используйте 32 байта (256 бит), а для HMAC-SHA512 и HS512 — 64 байта.

Это то же самое, что openssl rand -base64 32?
Инструмент создаёт значения того же вида. При длине 32 байта, стандартном варианте и включённом дополнении каждый результат имеет длину 44 символа, заканчивается одним знаком = и декодируется в 32 случайных байта. Сами значения, разумеется, каждый раз разные.
Какую единицу выбрать: байты или символы?

Выбирайте байты, если строка будет декодироваться, как в случае ключей шифрования и секретов Kubernetes. Выбирайте символы, если системе нужен токен точной длины, который используется как текст. Строка, созданная в режиме символов, гарантированно декодируется без ошибок, только если её длина кратна 4.

Когда нужен вариант, безопасный для URL?
Всегда, когда значение попадает в URL, строку запроса, cookie или имя файла. В стандартном Base64 символ / разделяет части пути URL, а + в строках запроса с кодированием форм превращается в пробел. Base64, безопасный для URL, использует вместо них - и _ и обычно записывается без дополнения.
Сохраняются ли сгенерированные значения и отправляются ли они куда-нибудь?

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