Загрузить файл
  1. base64hub
  2. Ключи и хеши
  3. Генератор ключей Base64

Генератор ключей Base64

Выберите пресет и получите ключ ровно в том формате, который ждёт ваш фреймворк: 32 случайных байта в Base64, Laravel APP_KEY, ключ AES, секрет HMAC или JWT. Каждый ключ создаётся локально стойким генератором случайных чисел браузера.

Бесплатно без регистрации и ограничений Локально ничего не загружается Пресеты Laravel, AES, HMAC, JWT, Django, Rails Обновлено 27 окт. 2026 г.

Энтропия –Длина –

Создано через crypto.getRandomValues – криптографически стойкий генератор браузера. Ничего не сохраняется и не отправляется.

Обработка идёт в браузере. Эта страница не может никуда отправить ваши данные – откуда мы это знаем

Как сгенерировать ключ

  1. Выберите пресет под то, что настраиваете. При открытии страницы выбран 32 байта.
  2. Скопируйте значение из блока Случайные значения. У пресетов со строкой конфигурации, например Laravel или Auth.js, она дополнительно показана в блоке Готово к вставке.
  3. Нажмите Сгенерировать заново, чтобы получить другой ключ, или увеличьте Количество, чтобы создать сразу несколько, например по одному на каждое окружение.

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

Пресеты и куда идёт каждый ключ

ПресетЧто получаетсяДлинаГде обычно используется
16 / 32 / 64 байтаслучайные байты в Base6424 / 44 / 88универсальные ключи, соли, секреты
Laravel APP_KEYbase64: + 32 байта51APP_KEY в .env
Ключ AES-12816 байт, Base6424AES-128-GCM или -CBC
Ключ AES-25632 байта, Base6444AES-256-GCM или -CBC
Секрет HMAC32 байта, Base6444подпись HMAC-SHA256, вебхуки
Секрет JWT HS25632 байта, Base64URL43JWT_SECRET для токенов HS256
Секрет Auth.js32 байта, Base6444AUTH_SECRET (раньше NEXTAUTH_SECRET)
Django SECRET_KEY50 символов из алфавита Django50SECRET_KEY в settings
Rails secret_key_base64 байта, hex128secret_key_base
API-токен32 байта, Base64URL43bearer-токены, ссылки-приглашения
UUID v4 (Base64URL)случайный UUID в короткой записи22компактные ID; канонический UUID тоже показан

Пресет для nonce в CSP решает другую задачу, и у него своя страница: генератор nonce для CSP.

Размеры диктуют сами алгоритмы. Ключ AES занимает ровно 16, 24 или 32 байта, любой другой отвергается. RFC 7518 требует для HS256 секрет не короче 256 бит, поэтому пресет JWT использует 32 байта. Ключ HMAC короче вывода хеш-функции ослабляет HMAC, так что 32 байта подходят для HMAC-SHA256, а пресет на 64 байта подходит для HMAC-SHA512. Пресет Django выбирает 50 символов методом отбраковки (rejection sampling), поэтому все символы алфавита равновероятны. Так же работает и собственная get_random_secret_key() в Django.

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

Вы копируете запись случайных байтов в Base64. Код, который её использует, должен сначала её декодировать:

import base64, os

key = base64.b64decode(os.environ["AES_KEY"])
assert len(key) == 32

В Node.js то же делает Buffer.from(process.env.AES_KEY, "base64"). Если отдать библиотеке AES строку из 44 символов как есть, она либо откажется её принимать (AESGCM key must be 128, 192, or 256 bits в Python, Invalid key length в Node.js), либо, если библиотека менее строгая, молча возьмёт не те байты. Фреймворки, которые сами читают свои ключи, например Laravel с префиксом base64:, декодируют их за вас.

Base64URL и стандартный Base64 декодируются в одни и те же байты, но парсеры часто строго принимают только один вариант. Оставляйте формат, который выдал пресет, если не уверены, что получатель понимает и другой.

Ключи Fernet и другие форматы

Пакет cryptography для Python ждёт ключ Fernet в виде 32 байтов в URL-safe Base64 с дополнением, то есть 44 символа. Пресеты JWT и API-токена дают URL-safe вариант без =, поэтому допишите его в конец или сгенерируйте ключ в Python:

from cryptography.fernet import Fernet

print(Fernet.generate_key().decode())

Для всего остального отталкивайтесь от числа байтов: выберите Свой вариант, укажите столько байтов, сколько требует документация библиотеки, и выберите Base64, Base64URL или hex. На странице генератора случайного Base64 объясняется длина результата, а в HMAC в Base64 и шифровании AES свежий ключ можно сразу опробовать.

Что делать с ключом после генерации

Сгенерированный здесь ключ существует только в этой вкладке, пока вы его не скопируете. Дальше он защищён ровно настолько, насколько защищено место, куда вы его вставили. Держите боевые ключи в хранилище секретов платформы или в менеджере секретов, используйте отдельный ключ для каждого окружения и никогда не коммитьте их; ключ, попавший в Git-репозиторий, считайте публичным и заменяйте. Смена ключа шифрования означает перешифровку старых данных или хранение старого ключа для расшифровки, так что продумайте это до того, как менять APP_KEY на работающей системе.

Вопросы и ответы

Как сгенерировать ключ Base64 на 32 байта?

Пресет 32 байта выбран сразу при открытии страницы, так что в результате уже лежит такой ключ: 44 символа с = в конце. В терминале то же самое делает openssl rand -base64 32.

Можно ли взять строку Base64 из 44 символов прямо как ключ AES-256?

Нет. AES-256 нужны 32 сырых байта, а 44 символа только записывают их в Base64. Сначала декодируйте строку; если передать сам текст, получите ошибку вроде Invalid key length в Node.js.

Как получить Laravel APP_KEY без artisan?

Выберите пресет Laravel APP_KEY и скопируйте строку APP_KEY=base64:… в .env. Формат тот же, что пишет php artisan key:generate: префикс base64: и 32 случайных байта для шифра AES-256-CBC по умолчанию.

Как сделать здесь ключ Fernet?

Отдельного пресета для Fernet нет. Выберите 32 байта, в поле Формат укажите Base64URL и допишите один = к 43 символам: Fernet ждёт URL-safe Base64 с дополнением длиной 44 символа. Или запустите Fernet.generate_key() в Python.

Безопасно ли генерировать боевые ключи в браузере?

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