Генератор кодов TOTP / 2FA
Сгенерируйте код TOTP/2FA из Base32-секрета — на 100% в браузере, ваш секрет никогда не покидает устройство. Настройка по QR + проверка кода.
Расширенные параметры
Что такое генератор кодов TOTP / 2FA?
Генератор TOTP превращает общий секрет в сменяющийся одноразовый код, на котором основана двухфакторная аутентификация. TOTP — одноразовый пароль на основе времени, определён в RFC 6238 — берёт Base32-секрет и текущее время, разбивает время на фиксированные шаги (по умолчанию 30 секунд) и выполняет HMAC над счётчиком шагов, чтобы получить короткий числовой код. Поскольку и ваше приложение-аутентификатор, и сервер хранят один и тот же секрет и читают одни и те же часы, они вычисляют идентичный код, ни разу не обмениваясь им по сети. В этом весь смысл 2FA: даже если ваш пароль утечёт, злоумышленнику всё равно нужен код, который может произвести прямо сейчас только ваш секрет.
«Алгоритм TOTP — это вариант алгоритма HOTP на основе времени... TOTP = HOTP(K, T), где T — целое число, представляющее число временных шагов между начальным временем счётчика T0 и текущим временем Unix.» — RFC 6238, раздел 4
Этот инструмент выполняет три задачи на одной странице. Он генерирует живой код из любого Base32-секрета с обратным отсчётом и предпросмотром следующего кода; он настраивает совершенно новый секрет, создавая URI otpauth:// и QR-код, который вы сканируете в приложение-аутентификатор; и он проверяет код относительно секрета с допуском ±1 временной шаг, повторяя то, как реальные серверы принимают только что сменившийся код. Всё это работает через встроенный Web Crypto API браузера с нулевыми зависимостями и нулевыми сетевыми вызовами.
Разработчики постоянно обращаются к генератору TOTP: чтобы воспроизвести точный код, который показывает приложение пользователя при отладке входа с 2FA, чтобы создать секрет и QR для новой учётной записи, чтобы подтвердить, что окно проверки на сервере совпадает с тем, что испытывают пользователи, или чтобы построить детерминированные фикстуры для сквозных тестов двухфакторного потока. Поскольку секрет — это долгоживущий ключ — любой, у кого он есть, может сгенерировать каждый будущий код — его нужно защищать как пароль. Сочетайте этот инструмент с нашим генератором случайных паролей для надёжных паролей и кодов восстановления, которые соседствуют с 2FA, и с генератором QR-кодов, когда вам нужно отдельное изображение для добавления. Для подписи веб-токенов JSON, которые часто сопровождают аутентифицированную сессию, см. JWT encoder.
// Generate a TOTP code in the browser with the Web Crypto API
// (SHA-1, 6 digits, 30s period — RFC 6238 defaults)
async function generateTotp(base32Secret, time = Date.now()) {
// Decode the Base32 secret to raw bytes (A-Z, 2-7)
const alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
let bits = '';
for (const c of base32Secret.replace(/=+$/, '').toUpperCase())
bits += alpha.indexOf(c).toString(2).padStart(5, '0');
const bytes = new Uint8Array(
bits.match(/.{8}/g).map((b) => parseInt(b, 2)));
// Counter = number of 30s steps since the Unix epoch (8-byte big-endian)
const counter = Math.floor(time / 1000 / 30);
const msg = new Uint8Array(8);
let c = counter;
for (let i = 7; i >= 0; i--) { msg[i] = c & 0xff; c = Math.floor(c / 256); }
const key = await crypto.subtle.importKey(
'raw', bytes, { name: 'HMAC', hash: 'SHA-1' }, false, ['sign']);
const hmac = new Uint8Array(await crypto.subtle.sign('HMAC', key, msg));
// Dynamic truncation (RFC 4226) -> 6-digit code
const off = hmac[hmac.length - 1] & 0x0f;
const bin = ((hmac[off] & 0x7f) << 24) | (hmac[off + 1] << 16) |
(hmac[off + 2] << 8) | hmac[off + 3];
return (bin % 1_000_000).toString().padStart(6, '0');
}
const code = await generateTotp('JBSWY3DPEHPK3PXP');
// -> a 6-digit code that rotates every 30 seconds Ключевые возможности
Живой код с обратным отсчётом
Вставьте Base32-секрет, и текущий код TOTP появится мгновенно с кольцом обратного отсчёта на 30 секунд и предпросмотром следующего кода — без кнопки «Генерация», без ожидания.
Настройка секрета и QR
Сгенерируйте случайный Base32-секрет, затем получите URI otpauth:// и QR-код для сканирования прямо в Google Authenticator, Authy или 1Password.
Встроенный верификатор кодов
Сверяйте код с секретом с тем же допуском ±1 временной шаг, который используют реальные серверы, чтобы только что сменившийся код всё равно проходил проверку.
Настраиваемый алгоритм и цифры
Переключайтесь между SHA-1, SHA-256 и SHA-512, выбирайте 6 или 8 цифр и устанавливайте период 30 с или 60 с в соответствии с требованиями любого провайдера.
Секрет никогда не покидает ваш браузер
Каждый код вычисляется локально через встроенный Web Crypto API. Ничто не загружается, не логируется и не хранится — что можно проверить даже офлайн.
Нулевые зависимости
Построено только на Web Crypto API браузера — никаких сторонних библиотек, никакой телеметрии и никаких сетевых вызовов любого рода.
Примеры генератора TOTP
Стандартный 6-значный TOTP (SHA-1, 30 с)
secret: JBSWY3DPEHPK3PXP algorithm: SHA-1 digits: 6 period: 30s
Code: 282760 · expires in 30s
Канонический тестовый секрет RFC 6238 с настройками по умолчанию, которые использует каждое основное приложение, — SHA-1, 6 цифр, период 30 секунд. Код основан на времени, поэтому точное значение зависит от текущего времени; инструмент показывает обратный отсчёт в реальном времени и следующий код.
8-значный корпоративный TOTP (SHA-256)
secret: JBSWY3DPEHPK3PXP algorithm: SHA-256 digits: 8 period: 30s
Code: 31094217 · expires in 30s
Некоторые корпоративные системы и системы с высоким уровнем безопасности выдают 8-значные коды, подписанные SHA-256 вместо SHA-1 по умолчанию. Точно сопоставьте алгоритм, число цифр и период с тем, что ожидает ваш сервер, иначе сгенерированный код не пройдёт проверку.
URI настройки otpauth:// для приложений-аутентификаторов
issuer: Acme account: alice@example.com secret: JBSWY3DPEHPK3PXP
otpauth://totp/Acme:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Acme&algorithm=SHA1&digits=6&period=30
Инструмент создаёт стандартный URI otpauth:// и отображает его в виде QR-кода. Отсканируйте его с помощью Google Authenticator, Authy или 1Password — или вставьте URI напрямую — чтобы добавить секрет на ваше устройство.
Как использовать генератор TOTP
- 1
Вставьте Base32-секрет
На вкладке «Генерация» вставьте ваш Base32-секрет (например, JBSWY3DPEHPK3PXP). Текущий код TOTP появится мгновенно с обратным отсчётом на 30 секунд — без кнопки «Генерация».
- 2
Настройте расширенные параметры (необязательно)
Откройте расширенные параметры, чтобы изменить алгоритм (SHA-1/256/512), число цифр (6 или 8) или период (30 или 60 с) в соответствии с тем, что выдал ваш провайдер.
- 3
Настройте или проверьте
Используйте вкладку «Настройка», чтобы сгенерировать секрет и QR для приложения-аутентификатора, или вкладку «Проверка», чтобы сверить код с секретом с допуском ±1 временной шаг.
Распространённые ошибки
Несовпадающий алгоритм или число цифр
Секрет, выпущенный для SHA-256 или 8 цифр, производит совершенно другой код при значениях по умолчанию SHA-1 / 6 цифр. Точно сопоставьте параметры провайдера.
secret + SHA-1/6 digits // but server expects SHA-256/8
algorithm: SHA-256, digits: 8 // match the otpauth:// URI
Сдвиг часов
Если часы устройства отклоняются больше чем на один временной шаг, код не пройдёт проверку. Синхронизируйте системные часы перед сравнением кодов.
system clock 90s fast // code is two steps ahead
enable NTP / automatic time // code aligns with server
Недопустимый Base32-секрет
Base32 использует только A–Z и 2–7. Пробелы из напечатанного ключа допустимы, но 0, 1 или 8 не являются допустимым Base32 и не пройдут декодирование.
secret: "JBSW 0NE8" // contains 0 and 8
secret: "JBSWY3DPEHPK3PXP" // valid Base32
Распространённые сценарии использования
- Отладить поток входа с 2FA
- Воспроизведите точный код, который показывает приложение-аутентификатор пользователя, чтобы проследить, почему двухфакторный вход отклоняется.
- Добавить новую учётную запись
- Сгенерируйте свежий Base32-секрет и QR-код, затем отсканируйте его в Google Authenticator, Authy или 1Password, чтобы настроить 2FA.
- Проверить окно вашего сервера
- Сверяйте коды с секретом, чтобы подтвердить, что ваш бэкенд принимает только что сменившийся код и отклоняет истёкший.
- Построить фикстуры для сквозных тестов
- Вычисляйте детерминированные коды TOTP из известного секрета, чтобы управлять автоматическими тестами потока двухфакторной аутентификации.
- Сопоставить корпоративные настройки
- Воспроизводите 8-значные или SHA-256 коды, когда провайдер отступает от значений по умолчанию SHA-1 / 6 цифр, чтобы отладить несоответствие.
- Быстро восстановить доступ
- Сгенерируйте текущий код из резервного секрета, когда телефон недоступен, — используя одноразовую копию секрета.
Технические детали
- Соответствие RFC 6238 / RFC 4226
- Реализует TOTP согласно RFC 6238 поверх алгоритма динамического усечения HOTP из RFC 4226, с выбираемыми SHA-1, SHA-256 и SHA-512.
- Встроенный Web Crypto HMAC
- Коды получаются через crypto.subtle HMAC над счётчиком временного шага в формате big-endian. Декодирование Base32 и усечение выполняются полностью в браузере.
- Стандартные URI otpauth://, нулевые зависимости
- URI настройки следуют формату Key Uri Format (otpauth://totp) с параметрами issuer, algorithm, digits и period. Нет внешних библиотек, нет сетевых вызовов.
Лучшие практики
- Относитесь к секрету как к паролю
- Любой, у кого есть Base32-секрет, может сгенерировать каждый будущий код. Храните его в менеджере секретов, никогда — в системе контроля версий, и предпочитайте тестовые секреты здесь.
- Держите часы синхронизированными
- TOTP зависит от точного времени. Включите сетевую синхронизацию времени на серверах и устройствах, чтобы коды совпадали в пределах окна проверки.
- Придерживайтесь значений по умолчанию, если не требуется иное
- SHA-1, 6 цифр и период 30 секунд максимизируют совместимость с приложениями. Переключайтесь на 8 цифр или SHA-256/512 только тогда, когда этого требует ваш провайдер.
Частые вопросы о генераторе TOTP / 2FA
Безопасно ли использовать онлайн-генератор TOTP / 2FA?
otpauth:// и сгенерированный код вычисляются полностью локально с помощью встроенного Web Crypto API. Нет сетевых запросов, нет логирования, нет хранения и нет аналитики, привязанной к вашему вводу — это можно проверить, отключившись от интернета и наблюдая, как инструмент продолжает работать. Это полная противоположность подозрительному генератору, который отправляет ваш секрет на сервер POST-запросом, где оператор смог бы выпускать ваши коды бесконечно. Секрет TOTP — это долгоживущий общий ключ, поэтому самая безопасная привычка — по-прежнему предпочитать одноразовые или тестовые секреты, когда вам просто нужно поэкспериментировать. Что такое TOTP и что такое Base32-секрет?
JBSWY3DPEHPK3PXP — это хорошо известный тестовый секрет RFC. Почему сгенерированный код отличается от приложения-аутентификатора на моём телефоне?
В чём разница между TOTP и HOTP?
Можно ли использовать 8-значные коды или SHA-256 / SHA-512?
otpauth://, который создаёт инструмент, записывает эти параметры, чтобы ваше приложение добавило секрет правильно. Как добавить этот секрет в Google Authenticator, Authy или 1Password?
otpauth://. В Google Authenticator или Authy нажмите кнопку добавления и выберите Сканировать QR-код, чтобы навести камеру на QR на экране, или выберите Ввести ключ настройки и вставьте Base32-секрет с соответствующим именем учётной записи и алгоритмом. В 1Password отредактируйте элемент входа, добавьте поле Одноразовый пароль и вставьте URI otpauth:// напрямую. Нужно отдельное изображение QR для документации? Используйте наш генератор QR-кодов, а для случайных секретов и кодов восстановления рядом с ним — генератор случайных паролей. Похожие инструменты
Все инструменты →Генератор и проверка bcrypt-хешей
Безопасность
Создавайте и проверяйте bcrypt-хеши паролей онлайн — настраиваемый фактор стоимости, префиксы $2b$/$2a$/$2y$. 100% в браузере; пароль никуда не отправляется.
Декодер JWT
Безопасность
Декодируйте JWT-токены онлайн бесплатно. Просмотр header, payload, signature, срока действия, алгоритма и claims. 100% в браузере — токен не покидает устройство. Без регистрации.
JWT-энкодер и генератор
Безопасность
Бесплатный онлайн-генератор и энкодер JWT. Соберите header и payload, подпишите с HS256, RS256 или ES256 мгновенно. 100% в браузере — ваш секрет и ключ не покидают устройство.
Бесплатный генератор JWT-секрета — HS256/384/512
Безопасность
Создайте надёжный JWT-секрет по RFC для HS256/384/512 — 100% в браузере, ничего не уходит на сервер. base64url, base64 или hex; копия для .env.
Генератор MD5-хешей и контрольных сумм файлов
Безопасность
Создавайте MD5, SHA-256, SHA-1 и SHA-512 хеши онлайн бесплатно. Хеширование текста или файлов в браузере, проверка контрольных сумм и копирование результатов. Без регистрации.
Генератор случайных паролей — настраиваемый и безопасный
Безопасность
Генерируйте сильные случайные пароли мгновенно — бесплатно, 100% в браузере. Настройка длины и символов, batch до 50 с анализом энтропии.