Skip to content

Генератор кодов TOTP / 2FA

Сгенерируйте код TOTP/2FA из Base32-секрета — на 100% в браузере, ваш секрет никогда не покидает устройство. Настройка по QR + проверка кода.

Без отслеживания Работает в браузере Бесплатно
Вычисляется локально в вашем браузере — ваш секрет никогда не покидает устройство.
Расширенные параметры
Текущий код
------
Следующий код: ------
Следует поведению RFC 6238 / RFC 4226; вывод сверен с опубликованными тестовыми векторами и независимым приложением-аутентификатором — Команда безопасности Go Tools · Jun 12, 2026

Что такое генератор кодов 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. 1

    Вставьте Base32-секрет

    На вкладке «Генерация» вставьте ваш Base32-секрет (например, JBSWY3DPEHPK3PXP). Текущий код TOTP появится мгновенно с обратным отсчётом на 30 секунд — без кнопки «Генерация».

  2. 2

    Настройте расширенные параметры (необязательно)

    Откройте расширенные параметры, чтобы изменить алгоритм (SHA-1/256/512), число цифр (6 или 8) или период (30 или 60 с) в соответствии с тем, что выдал ваш провайдер.

  3. 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?
С этим — да, и причина в том, что ничто никогда не покидает ваш браузер. Вводимый вами Base32-секрет, URI otpauth:// и сгенерированный код вычисляются полностью локально с помощью встроенного Web Crypto API. Нет сетевых запросов, нет логирования, нет хранения и нет аналитики, привязанной к вашему вводу — это можно проверить, отключившись от интернета и наблюдая, как инструмент продолжает работать. Это полная противоположность подозрительному генератору, который отправляет ваш секрет на сервер POST-запросом, где оператор смог бы выпускать ваши коды бесконечно. Секрет TOTP — это долгоживущий общий ключ, поэтому самая безопасная привычка — по-прежнему предпочитать одноразовые или тестовые секреты, когда вам просто нужно поэкспериментировать.
Что такое TOTP и что такое Base32-секрет?
TOTP (одноразовый пароль на основе времени, определён в RFC 6238) — это алгоритм, стоящий за сменяющимися 6-значными кодами в приложениях-аутентификаторах. Он объединяет общий секрет с текущим временем, разделённым на фиксированные шаги (обычно 30 секунд), через HMAC, чтобы получить короткий код, который и ваше устройство, и сервер могут вычислить независимо. Секрет — это общий ключ, и он почти всегда записывается в Base32 — заглавные буквы A–Z и цифры 2–7 — потому что этот алфавит нечувствителен к регистру и его легко вводить или кодировать в QR-коде. Строка JBSWY3DPEHPK3PXP — это хорошо известный тестовый секрет RFC.
Почему сгенерированный код отличается от приложения-аутентификатора на моём телефоне?
Чтобы два кода TOTP совпали, должны совпасть четыре вещи. Первое — часы: TOTP зависит от текущего времени, поэтому если часы вашего компьютера или телефона отстают/спешат больше чем на один шаг, коды расходятся — синхронизируйте системные часы и попробуйте снова. Второе — алгоритм: этот инструмент по умолчанию использует SHA-1 (что используют большинство приложений), но если ваш секрет был выпущен для SHA-256 или SHA-512, вы должны выбрать его и здесь. Третье — цифры и период: 6 или 8 цифр, окно 30 с или 60 с дают совершенно разные коды. Четвёртое — сам секрет: один опечатанный символ Base32 меняет каждый код. Согласуйте все четыре, и коды совпадут.
В чём разница между TOTP и HOTP?
Оба происходят из одного семейства одноразовых паролей на основе HMAC, но различаются тем, что управляет кодом. HOTP (RFC 4226) основан на счётчике: каждый код привязан к увеличивающемуся счётчику, поэтому код остаётся действительным, пока он не использован и счётчик не сдвинулся. TOTP (RFC 6238) основан на времени: он заменяет счётчик текущим временем, разделённым на фиксированные шаги, поэтому коды автоматически сменяются каждые 30 секунд. TOTP — это, по сути, HOTP, где счётчик установлен равным числу временных шагов с момента начала эпохи Unix. Этот инструмент генерирует TOTP, который Google Authenticator, Authy и 1Password используют по умолчанию.
Можно ли использовать 8-значные коды или SHA-256 / SHA-512?
Да. Откройте расширенные параметры, чтобы переключить алгоритм на SHA-256 или SHA-512, установить цифры в 8 или изменить период на 60 секунд. Эти настройки существуют, потому что некоторые корпоративные и банковские системы требуют более длинные коды или более стойкие хеши. При этом подавляющее большинство сервисов — и каждое основное потребительское приложение-аутентификатор — использует значения по умолчанию SHA-1, 6 цифр и период 30 секунд, поэтому оставьте их как есть, если инструкции по настройке вашего провайдера не говорят иначе. Что бы вы ни выбрали, URI otpauth://, который создаёт инструмент, записывает эти параметры, чтобы ваше приложение добавило секрет правильно.
Как добавить этот секрет в Google Authenticator, Authy или 1Password?
Перейдите на вкладку Настройка, чтобы сгенерировать (или вставить) секрет, затем либо отсканируйте QR-код, либо скопируйте URI 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 с анализом энтропии.