Генератор соли и случайных токенов
КриптоСоздаёт криптографически стойкие случайные соли и токены в hex или Base64 через crypto.getRandomValues.
На этой странице
Что такое соль?#
Соль — это фрагмент случайных данных, который подмешивают в процесс хеширования, чтобы два одинаковых входа дали разные выходы. Её задача — уникальность, а не секретность: соль может лежать открытым текстом рядом с защищаемым ею хешем и всё равно громить атаку, рассчитанную на то, что у каждого пользователя с одним паролем будет одинаковый дайджест. Когда у каждого пароля своя соль, атакующий не может переиспользовать одну заранее вычисленную таблицу на всю базу — приходится пересчитывать для каждой записи.
Страница генерирует криптостойкие случайные байты через crypto.getRandomValues и отдаёт их в трёх кодировках: Hex (два символа на байт, стандарт для паролей и токенов целостности), Base64 (компактнее) и Base64url (URL- и файлобезопасный вариант, который заменяет +// на -/_ и убирает паддинг =, применяется в JWT и подписанных URL).
Тот же примитив служит универсальным генератором случайных токенов: API-ключи, nonce, непрозрачные идентификаторы и одноразовые токены — всё это «немного случайных байтов, закодированных текстом», что именно здесь и получается.
Как пользоваться#
- Задайте количество байтов. Значение по умолчанию 16 (128 бит) — стандартный размер соли; поле принимает до 8192 для случаев, когда нужен более длинный токен.
- Выберите Формат вывода: Hex, Base64 или Base64url.
- Нажмите Создать, затем Копировать. Строка состояния показывает, сколько бит энтропии представляет результат (байты × 8), чтобы вы могли с одного взгляда убедиться, что получили именно то, что просили.
Ключевые возможности#
- Несмещённые случайные байты. Берутся из
crypto.getRandomValues— криптостойкого генератора браузера. - Три кодировки. Hex — для солей и контрольных сумм; Base64 — для компактных токенов; Base64url — для всего, что путешествует в URL, имени файла или JSON.
- Честная энтропия. Строка состояния указывает фактическое число бит, а не длину закодированной строки, которую легко прочитать неверно.
- До 8192 байт. Один и тот же инструмент служит и для 16-байтной соли, и для 256-байтного ключевого блоба.
- Без отправки данных. Генерация локальна; случайные байты не передаются.
Разбор примера#
Сгенерируйте 16 байт в каждом из трёх форматов. 16 байт — это 128 бит энтропии, а длины закодированного выхода фиксированы независимо от случайных значений:
- Hex — 32 символа, напр.
7a4c9f1e0b8d2635c4a1e9f07b2d4861 - Base64 — 24 символа с паддингом
==, напр.8MDwarqMD7B594C5hCB1zQ== - Base64url — 22 символа, паддинг снят, напр.
8MDwarqMD7B594C5hCB1zQ
(Значения выше показывают форму; ваш фактический выход при каждом нажатии отличается, потому что байты свежеслучайные.) Поставьте 32 байта для 256-битной соли или ключа, и длины вырастут детерминированно: 64 Hex-символа, 44 Base64-символа, 43 Base64url-символа. Это фиксированное соотношение между числом байт и длиной кодированного выхода — быстрый способ убедиться, что вы сгенерировали именно тот размер, что задумали.
FAQ#
Должна ли соль быть секретной?#
Нет. Назначение соли — уникальность: она гарантирует, что хеширование одного и того же пароля дважды даёт разные дайджесты. Она хранится рядом с хешем открытым текстом, и это не ослабляет схему. То, что действительно должно оставаться секретом, — это ключ в HMAC или пароль при шифровании, а не соль.
Сколько байт генерировать?#
16 байт (128 бит) — стандарт для парольных солей и большинства токенов: это делает случайные совпадения практически невозможными. Для сессионных токенов или того, что должно долго прожить под натиском хорошо финансируемого атакующего, 32 байта (256 бит) — комфортный запас. Сверх этого обычно излишне, если только конкретный протокол не требует иного.
В чём разница между Base64 и Base64url?#
И та и другая кодируют одни и те же байты, но Base64 использует + и /, что ломает URL и имена файлов, и паддинг =. Base64url заменяет их на - и _ и убирает паддинг, поэтому результат можно вставить прямо в путь URL, в строку запроса или в имя файла без экранирования. Используйте Base64url для JWT, подписанных URL и непрозрачных токенов; обычный Base64 — когда выход остаётся внутри полей данных.
Можно ли использовать это как API-ключ?#
Да. Сгенерируйте 32 байта в Base64url — и у вас 43-символьный токен со 256 битами энтропии: более чем достаточно для API-ключа или долгоживущего bearer-токена. Только не забудьте сразу его скопировать: значение генерируется локально и восстановить его позже нельзя.