Случайная строка нужной длины в hex или Base64 — то же, что даёт команда openssl rand -hex 32. Строки создаются в вашем браузере и никуда не передаются.
Команда берёт 32 байта из криптографически стойкого генератора случайных чисел OpenSSL и выводит их в шестнадцатеричном виде: каждый байт — два символа из 0–9 и a–f. Получается строка из 64 символов, в которой 256 бит случайности. Число в команде — это байты, а не символы: openssl rand -hex 16 даёт 32 символа, openssl rand -hex 64 — 128. В таблице в столбцах «Hex» и «Base64» — длина строки в символах.
| Байт | Бит | Hex | Base64 | Для чего обычно |
|---|---|---|---|---|
| 16 | 128 | 32 | 24 | идентификаторы, токены сессий, соль, ключ AES-128 |
| 24 | 192 | 48 | 32 | токены и ключи API |
| 32 | 256 | 64 | 44 | секретный ключ приложения, подпись JWT (HS256) и вебхуков, ключ AES-256 |
| 48 | 384 | 96 | 64 | подпись HS384, ключи с запасом |
| 64 | 512 | 128 | 88 | подпись HS512 и HMAC-SHA512, секреты фреймворков, которым нужно 64 байта |
SECRET_KEY, APP_KEY, JWT_SECRET в файле .env или настройках сервиса.Hex — только цифры и буквы a–f: строку можно вставить куда угодно — в настройки, адрес, имя файла — без экранирования. Минус — длина: два символа на байт. Base64 короче (примерно 1,33 символа на байт), но в нём есть +, / и =, которые в ссылках и некоторых файлах настроек приходится экранировать. Base64url заменяет + и / на - и _ и обходится без = — так кодируют части JWT и токены в ссылках.
Если документация просит «ключ длиной 32 байта», ей нужны 32 байта после декодирования, а не 32 символа: в hex это 64 символа, в Base64 — 44.
openssl rand -hex 32 или openssl rand -base64 32. При длине больше 48 байт OpenSSL переносит Base64 на новую строку — добавьте | tr -d '\n'.head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \n'$b = New-Object byte[] 32; [Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($b); ($b | ForEach-Object { $_.ToString('x2') }) -join '' — hex; [Convert]::ToBase64String($b) — Base64. OpenSSL для Windows входит, например, в Git for Windows (Git Bash).python3 -c "import secrets; print(secrets.token_hex(32))"node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"На этой странице строки создаёт встроенный в браузер криптографически стойкий генератор (Web Crypto API, crypto.getRandomValues). Они не отправляются на сервер и нигде не сохраняются — это можно проверить в инструментах разработчика на вкладке «Сеть». Для важных систем надёжнее выполнить команду прямо на сервере, где ключ будет работать: тогда он не окажется ни в буфере обмена, ни в истории браузера.
Готовый ключ храните в менеджере паролей или хранилище секретов, а не в коде и не в репозитории. Если ключ мог попасть в чужие руки — замените его, а не ждите.