Как сгенерировать случайный Base64
- Укажите в поле Байты, сколько случайности нужно: от 1 до 4096. По умолчанию 32 байта, то есть 256 бит.
- Выберите Формат: Base64, Base64URL (URL-safe, без дополнения) или hex. Для Base64 можно ещё включить Без дополнения (=).
- В поле Количество задайте, сколько значений сгенерировать сразу (до 1000, по одному на строку).
- Скопируйте результат, скачайте его текстовым файлом или нажмите Сгенерировать заново для нового набора. Энтропия и Длина под результатом показывают число бит случайности и количество символов.
Если нужен ключ в определённом формате, например APP_KEY для Laravel или ключ AES-256, выберите вариант в блоке Пресеты вверху; что делает каждый из них, объясняет генератор ключей Base64.
Какой длины будет результат
Случайность заключена в байтах, а формат определяет только способ их записи. Base64 упаковывает в символ 6 бит, hex – всего 4, поэтому при той же стойкости hex всегда длиннее:
| Байты | Биты | Base64 | Base64 без дополнения | Base64URL | Hex |
|---|---|---|---|---|---|
| 8 | 64 | 12 | 11 | 11 | 16 |
| 16 | 128 | 24 | 22 | 22 | 32 |
| 24 | 192 | 32 | 32 | 32 | 48 |
| 32 | 256 | 44 | 43 | 43 | 64 |
| 48 | 384 | 64 | 64 | 64 | 96 |
| 64 | 512 | 88 | 86 | 86 | 128 |
Если число байтов делится на 3 (24, 48), = не появляется вовсе, и столбцы с дополнением и без совпадают. Когда значение попадает в URL, имя файла или cookie, берите Base64URL: + и / там пришлось бы экранировать.
Сколько байтов брать
- Уникальные ID, ID запросов, имена загружаемых файлов: 16 байт (128 бит). Угадать такое значение или наткнуться на совпадение практически невозможно.
- Токены сессий, API-токены, ссылки для сброса пароля: 32 байта. Дополнительный запас обходится примерно в 20 символов.
- Соли для хеширования паролей: обычно рекомендуют 16 байт; соль не обязана быть секретной, только уникальной.
- Тестовые данные: любой размер, а Количество заполнит файл тысячей значений за один раз.
Случайная строка стойка ровно настолько, насколько велико число её байтов. Если обрезать 44-символьное значение до 20 символов, чтобы влезло в поле, теряется больше половины энтропии, поэтому лучше выберите меньшее число байтов и используйте результат целиком.
То же самое в терминале и в коде
Все эти команды выдают 32 случайных байта в Base64 (secrets.token_urlsafe пишет их URL-safe алфавитом и без дополнения):
openssl rand -base64 32
head -c 32 /dev/urandom | base64
import base64, secrets
print(base64.b64encode(secrets.token_bytes(32)).decode())
print(secrets.token_urlsafe(32))
В Node.js crypto.randomBytes(32).toString("base64url") даёт URL-safe вариант. Ловушка с OpenSSL: больше 48 байт openssl rand -base64 переносит вывод на 64 символах, так что 64-байтовое значение приходит двумя строками. Для одной строки используйте openssl rand 64 | openssl base64 -A или уберите перенос, прежде чем вставлять значение в конфиг. Другие рецепты есть на страницах OpenSSL и Python.
Вопросы и ответы
Достаточно ли надёжен этот генератор для паролей и токенов?
Да. Байты даёт crypto.getRandomValues, криптографически стойкий генератор случайных чисел, встроенный в браузер. Для секретов не берите Math.random(): он не рассчитан на непредсказуемость.
Как получить случайную строку Base64 ровно из N символов?
Возьмите N × 3 ÷ 4 байт. Если число байтов делится на 3, дополнения нет: 33 байта дают ровно 44 символа, а 48 байт – ровно 64. В остальных случаях включите Без дополнения (=), и длина будет ⌈4 × байты ÷ 3⌉.
Могут ли два сгенерированных значения совпасть?
Теоретически да, но при 16 байтах (128 бит) и больше вероятность ничтожна: чтобы совпадение стало вероятным, нужно около 2^64 значений. Поэтому 16 байт считают обычным минимумом для уникальных случайных ID.
Значения где-нибудь сохраняются?
Нет. Они существуют только в этой вкладке, пока вы их не скопируете или не скачаете, а сама страница не может делать сетевые запросы, кроме счётчика просмотров Cloudflare. После перезагрузки страницы их не останется.