Генератор токенов делает случайные строки, которые нельзя угадать: API-ключи, идентификаторы сессий, коды для ссылок сброса пароля. Сразу уточним: это не генератор криптовалюты, токен в блокчейне он не выпустит. Типичная задача у нас — секрет для вебхука Telegram-бота. В setWebhook параметр secret_token принимает от 1 до 256 символов, и только A–Z, a–z, 0–9, «_» и «-». Это ровно набор Base64-url. Выбери его, поставь длину 64, нажми «Сгенерировать» и вставь строку в код бота. Генерация идёт в браузере через crypto.getRandomValues, и токен никуда не отправляется.
Что такое генератор токенов, в одном абзаце
Токен — это строка, которую нельзя угадать. Система по ней узнаёт что-то конкретное: API-запрос, сессию, ссылку для входа в один клик, сброс пароля. Генератор токенов создаёт такие строки с криптографически стойкой случайностью: каждый символ берётся из crypto.getRandomValues — того же типа источника, который OWASP рекомендует для идентификаторов сессий. Ты выбираешь длину, набор символов и, по желанию, префикс в стиле крупных API; инструмент выдаёт один токен или сразу до пятидесяти.
Он не заменяет генератор паролей (тот заточен под пароли, которые человек вводит руками: с индикатором надёжности и кнопкой показать/скрыть). Он заменяет другое — открыть консоль Node и набрать require('crypto').randomBytes(32).toString('hex').
Как работает генератор токенов Microapp
Двигай ползунок, чтобы задать длину (от 8 до 128 символов). Выбери набор символов: алфавитно-цифровой — универсальный вариант по умолчанию, hex — для строк, удобных в URL, base64-url — тот алфавит, что используют JWT и OAuth-токены, цифры — для кодов подтверждения по SMS, hex в верхнем регистре — когда нужен машиночитаемый HEX. Добавь при желании префикс вроде tk_, sk_live_, pk_ — эту практику популяризировал Stripe; современные API используют её, потому что по префиксу сразу видно, что это за токен. Укажи количество, если нужно сразу несколько токенов (до 50). Нажми «Сгенерировать», затем копируй токены по одному или всю пачку кнопкой «Скопировать всё».
Каждый байт случайности приходит из crypto.getRandomValues. Math.random в этой цепочке нет нигде — его результат достаточно предсказуем, чтобы подобрать перебором. Ничего не уходит из твоего браузера; токены на экране — единственная их копия.
sk_test_, длиной 24, алфавитно-цифровых. Результат: что-то вроде sk_test_aB8cD9eF1gH2iJ3kL4mN5oP6 ×20. Положи их в таблицу фикстур: при 6224 ≈ 1043 вариантах совпадение двух таких токенов на практике исключено.
Что на самом деле значит длина токена
Надёжность токена определяет не длина как таковая, а энтропия. У алфавитно-цифрового токена из 32 символов 6232 возможных значений — примерно 2,3 × 1057. Даже если перебирать триллион вариантов в секунду, на полный перебор уйдёт порядка 1038 лет — это в миллиарды миллиардов раз дольше возраста Вселенной.
Для большинства задач 32 алфавитно-цифровых символа — золотая середина: достаточно длинно, чтобы не угадать, достаточно коротко, чтобы помещаться в строку лога и копироваться тройным кликом. 64 символа реальной защиты не добавят — добавят только места в базе и визуального шума. Ниже 16 символов токен уже становится досягаем для перебора, если цель ценная.
Какой набор символов выбрать
| Набор символов | Для чего лучше всего | Почему |
|---|---|---|
| Алфавитно-цифровой | API-ключи, ID сессий | Универсальный вариант — работает везде, экранирование не нужно |
| Hex (строчные) | URL, имена файлов | Безопасен для URL, нет путаницы с регистром |
| Base64-url | JWT, OAuth-токены | Алфавит шире — больше энтропии на символ |
| Цифры | Коды подтверждения по SMS | Легко набрать на цифровой клавиатуре |
| Hex (заглавные) | Машинные логи, ID в базе данных | Хорошо читается моноширинным шрифтом; стандарт во многих системах |
Зачем нужен префикс
Префикс вроде tk_, sk_live_ или ghp_ сообщает любому, кто наткнётся на токен в логе, в репозитории или в сообщении в чате, что это за секрет. Начал это Stripe: sk_ — секретный ключ, pk_ — публикуемый, _live_ или _test_ — среда. GitHub перенял практику (ghp_, gho_, ghs_). Slack тоже так делает (xoxb-, xoxp-).
Мелочь, которая избавляет от огромной путаницы при разборе инцидентов: когда джуниор случайно коммитит токен в публичный репозиторий, по префиксу команда безопасности за секунды понимает, что менять — боевой платёжный ключ или просто токен песочницы. Четыре лишних символа того стоят.
Частые ошибки
Math.random. Соблазнительно, потому что короче набирать. Катастрофично, потому что Math.random — детерминированный генератор псевдослучайных чисел, засеянный состоянием системы: имея достаточно выборок, атакующий может предсказать следующее значение. Никогда не генерируй токены через Math.random. Генератор токенов именно поэтому использует только crypto.getRandomValues.
Хранить токены открытым текстом. Токены работают как пароли — они дают доступ. Храни на сервере их хеш, отдавай значение клиенту один раз при создании, и пусть хранит его клиент. Если базу украдут, хеши токенов атакующему бесполезны.
Нет срока действия. Токен без срока действия — это постоянный риск. Всегда задавай срок (claim exp для JWT, иначе TTL у строки в базе) и регулярно выпускай токены заново.
Один секрет на все среды. Токены продакшена должны отличаться от токенов стейджинга, а те — от токенов разработки. Префиксы помогают это соблюдать: если в dev-окружении вдруг появился токен sk_live_, это яркий тревожный сигнал.
Похожие инструменты
Для паролей, которые человек вводит руками, с индикатором надёжности — генератор паролей. Для уникальных ID (UUID) в роли первичных ключей в базе данных подойдёт генератор UUID. Чтобы захешировать токен перед сохранением, в большинстве случаев хватит генератора SHA-256. Для одноразовых кодов (TOTP / 2FA) есть генератор OTP. Для подписанных токенов с полезной нагрузкой (JWT) используй генератор JWT-токенов.