Как пользоваться
- Задайте длину и выберите в параметре «Единица длины», что она обозначает: «Байты случайных данных» или «Символы» Base64. Для ключа используйте байты: 32 байта — это 256-битный ключ.
- Укажите в поле «Количество», сколько строк вам нужно, и выберите «Разделитель» между ними: перевод строки, запятую или пробел.
- В параметре «Вариант» выберите «Стандартный (RFC 4648)» или «Безопасный для URL (RFC 4648 §5)». При единице «Байты случайных данных» можно также отключить «Дополнение», если целевая система не ожидает знаков =.
- Нажмите «Сгенерировать», чтобы получить новые значения, а затем «Копировать всё» или «Скачать», чтобы сохранить список.
Байты, символы и энтропия
Стойкость случайной строки измеряется в битах энтропии. Каждый случайный байт добавляет 8 бит, поэтому 16 байт дают 128 бит, а 32 байта — 256 бит. Base64 меняет лишь способ записи этих байтов: каждый символ несёт 6 бит, и каждые 3 байта превращаются в 4 символа. Инструмент показывает энтропию каждой строки, так что её можно оценить с первого взгляда.
В режиме «Байты случайных данных» результат декодируется ровно в указанное число случайных байтов — именно это нужно для ключей и секретов. В режиме «Символы» вы получаете точное число символов, каждый из которых равновероятно выбирается из 64-символьного алфавита; используйте этот режим, когда система требует токен фиксированной длины и хранит его как текст.
| Байты | Символы Base64 | Энтропия | Типичное применение |
|---|---|---|---|
| 12 | 16 | 96 бит | Nonce (IV) для AES-GCM |
| 16 | 24 (22 без дополнения) | 128 бит | Соли, токены сессий и CSRF, ключи AES-128 |
| 32 | 44 (43 без дополнения) | 256 бит | Ключи AES-256 и HMAC-SHA256, секреты HS256, API-ключи |
| 64 | 88 (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 случайных байта. Сами значения, разумеется, каждый раз разные.Какую единицу выбрать: байты или символы?
Выбирайте байты, если строка будет декодироваться, как в случае ключей шифрования и секретов Kubernetes. Выбирайте символы, если системе нужен токен точной длины, который используется как текст. Строка, созданная в режиме символов, гарантированно декодируется без ошибок, только если её длина кратна 4.
Когда нужен вариант, безопасный для URL?
/ разделяет части пути URL, а + в строках запроса с кодированием форм превращается в пробел. Base64, безопасный для URL, использует вместо них - и _ и обычно записывается без дополнения.Сохраняются ли сгенерированные значения и отправляются ли они куда-нибудь?
Нет. Они генерируются кодом JavaScript в вашем браузере, никуда не передаются и исчезают, когда вы покидаете страницу. Если вы используете значение как настоящий секрет, храните его в менеджере паролей или хранилище секретов, а не в сообщениях чатов или тикетах.