Что этот декодер принимает
- Изображение QR-кода
- PNG, JPG, JPEG, GIF, BMP или WebP. Перетащите файл, выберите его кликом или вставьте через Ctrl+V. Подойдёт и скриншот, и фотография экрана другого устройства — это важно, когда приложение запрещает скриншоты.
-
Ссылка
otpauth:// -
Вставьте саму ссылку, например
otpauth://totp/ACME:john@example.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=ACME. - Base32-секрет
-
Строка вида
HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ. Пробелы, дефисы и строчные буквы допустимы — они нормализуются автоматически. - QR экспорта Google Authenticator
-
Формат
otpauth-migration://offline?data=, в котором сразу несколько аккаунтов. Все они расшифровываются за один раз.
Для каждого аккаунта вы получаете живой шестизначный код
с обратным отсчётом, Base32-секрет, полную ссылку
otpauth:// и
сгенерированный заново QR-код, который можно отсканировать
в другое приложение.
Как расшифровать QR-код экспорта Google Authenticator
- Сделайте экспорт в приложении. В Google Authenticator откройте меню ⋮ → «Перенос аккаунтов» → «Экспорт аккаунтов» и выберите нужные. В один QR-код Google упаковывает не более десяти аккаунтов; при большем количестве кодов будет несколько.
- Снимите код. На Android экран экспорта блокирует скриншоты, поэтому надёжный путь — сфотографировать экран вторым телефоном или камерой. Такая фотография здесь распознаётся нормально.
-
Расшифруйте.
Загрузите фото или скриншот выше — либо, если строка
у вас уже есть текстом, вставьте
otpauth-migration://offline?data=…напрямую. -
Импортируйте куда нужно.
У каждого аккаунта появится свой QR-код и ссылка
otpauth://, так что в другой аутентификатор их можно добавлять по одному.
QR-код экспорта не читается
Код с десятью аккаунтами получается очень плотным, а плотные коды не распознаются — особенно если фотография сделана под углом или при плохом свете. Рабочее решение: экспортировать небольшими партиями примерно по четыре аккаунта. Каждый код становится разреженнее и читается с первого раза. Экспорт можно повторить столько раз, сколько потребуется.
Что внутри ссылки otpauth-migration
Параметр data — это
protobuf в кодировке base64url. Внутри лежит сообщение
MigrationPayload со
списком
OtpParameters: по одной
записи на аккаунт, в каждой — байты секрета, метка,
издатель и перечисления алгоритма, числа знаков и типа.
Эта страница разбирает структуру локально и переводит
каждый секрет в Base32.
Как перенести коды 2FA на новый телефон или в другое приложение
Сначала расшифруйте экспорт, сохраните секреты в надёжном месте, а затем обязательно проверьте вход хотя бы в два-три аккаунта с нового устройства. Только после этого удаляйте что-либо со старого телефона или сбрасывайте его — непроверенный секрет это не резервная копия.
Ссылки otpauth:// и
QR-коды по аккаунтам импортируются в Aegis, Ente Auth,
2FAS, Bitwarden, 1Password, KeePassXC, Proton Pass,
Яндекс ID и большинство других аутентификаторов — по
одному коду за раз.
Два случая, в которых инструмент не поможет, чтобы вы не
тратили время: Microsoft Authenticator не отдаёт свои
секреты в читаемом виде вообще, а Steam Guard использует
собственный формат вместо QR-кода
otpauth://.
TOTP для Госуслуг и других сервисов
Вход по одноразовому коду вместо СМС включается в профиле: «Безопасность» → «Вход в систему» → вход с подтверждением одноразовым кодом. QR-код и секретный ключ там показываются один раз, при подключении — и это единственный момент, когда их можно сохранить.
Если вы сохранили тот QR-код или ссылку
otpauth:// — загрузите их
здесь, чтобы увидеть Base32-секрет и перенести код в
другое приложение или на новый телефон. Если ничего не
сохранено, извлечь ключ уже нельзя: TOTP так устроен,
что сервис не отдаёт секрет повторно. В этом случае
остаётся отключить и заново подключить одноразовый код в
личном кабинете.
Кстати, в кириллической раскладке «TOTP» набирается как «ТОТР» — если вы искали именно так, вы попали туда, куда нужно. И ещё одно частое недоразумение: код TOTP никуда не «приходит». Он не присылается в СМС или письме, а каждые 30 секунд вычисляется на вашем устройстве из секретного ключа и текущего времени.
Безопасно ли расшифровывать QR-код 2FA здесь?
Разумное правило по умолчанию — никогда не вставлять секреты TOTP в онлайн-сервисы, и это правильный совет: большинство QR-декодеров в интернете отправляют ваше изображение на сервер. Разница здесь архитектурная — отправлять просто некуда, сервера нет.
Изображение читается библиотекой
jsQR на canvas внутри
страницы, данные экспорта разбирает
protobufjs, коды считает
totp-generator. Ни на
одном шаге нет сетевого запроса с вашими данными. Нет
бэкенда, нет отправки форм, ничего не пишется в
хранилище браузера.
Как проверить это самостоятельно
- Откройте DevTools → Network, очистите список и расшифруйте что-нибудь. Ни один запрос не содержит данных вашего QR-кода.
- Отключите сеть после загрузки страницы — расшифровка продолжит работать.
- Прочитайте исходный код: github.com/VizzleTF/TOTP_decoder.
- Сохраните страницу вместе с бандлом и откройте файл с диска вообще без подключения к сети.
Честная оговорка: страница загружает анонимный счётчик посещений (Vercel Analytics), который передаёт адрес страницы и больше ничего. Доступа к содержимому QR-кода, секретам и сгенерированным кодам у него нет — но это сетевой запрос, вы увидите его в DevTools, и лучше заранее знать, что это.
Когда лучше взять офлайн-инструмент
Ваше доверие здесь опирается на то, что код доставлен честно по HTTPS. Это реальное допущение: тот, кто управляет хостингом, в принципе может отдать другой JavaScript. Для особо ценных секретов — корпоративных аккаунтов, криптобирж — запустите локальный инструмент на машине без сети, например scito/extract_otp_secrets или dim13/otpauth.
Справочник формата ссылки otpauth://
Полная ссылка TOTP выглядит так:
otpauth://totp/ACME%20Co:john.doe@example.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=ACME%20Co&algorithm=SHA1&digits=6&period=30
| Параметр | Обязателен | Значения | По умолчанию |
|---|---|---|---|
| type | да | totp | hotp | — |
| label | да | Issuer:Account, URL-encoded | — |
| secret | да | Base32, A–Z и 2–7 | — |
| issuer | нет | название сервиса | — |
| algorithm | нет | SHA1 | SHA256 | SHA512 | SHA1 |
| digits | нет | 6 | 8 | 6 |
| period | нет | секунды, только TOTP | 30 |
| counter | только HOTP | целое число | — |
Многие аутентификаторы молча игнорируют
algorithm и
digits и просто
предполагают SHA-1 с шестью знаками — поэтому код может
оказаться неверным даже при правильном секрете.
Нераспознанные параметры читающая сторона должна просто
пропускать.
Base32-секрет: длина и частые ошибки
Обычно секрет содержит 16, 26 или 32 символа. Алфавит
Base32 — это только буквы A–Z и цифры 2–7, поэтому если
в строке есть
0,
1,
8 или
9, это не Base32 — обычная
причина ошибки «неверный секрет». Завершающие
= не обязательны, регистр
не важен.
Частые вопросы
Загружается ли мой QR-код или секрет куда-нибудь?
Нет. Расшифровка идёт в вашем браузере, и принимать данные попросту некому — бэкенда нет. Единственный сетевой запрос после загрузки страницы — анонимный счётчик посещений, который видит только адрес страницы.
Можно ли расшифровать QR экспорта с несколькими аккаунтами сразу?
Да. В одном
otpauth-migration://
до десяти аккаунтов, и все они выводятся
отдельно — каждый со своим кодом, секретом и
QR-кодом.
Почему не получается сделать скриншот QR-кода экспорта?
Google Authenticator помечает экран экспорта как защищённый, и Android блокирует захват экрана. Сфотографируйте экран другим устройством и загрузите фотографию.
QR экспорта не читается — что делать?
Экспортируйте меньше аккаунтов на один код — ориентируйтесь примерно на четыре. Получившийся QR намного разреженнее и уверенно распознаётся с фотографии.
Какой длины должен быть секретный ключ TOTP?
На практике от 16 до 32 символов Base32, то есть от 80 до 160 бит. Короче 16 символов — подозрительно слабо; если в строке есть цифры вне диапазона 2–7, это вообще не Base32.
Код не принимается, хотя секрет верный. Почему?
Чаще всего сбились часы устройства — TOTP
привязан к времени, и даже минута расхождения
всё ломает. Иначе проверьте, что
period,
digits и
algorithm
совпадают с тем, что ожидает сервис.
Можно перенести коды в Bitwarden, Aegis или 1Password?
Да — каждый аккаунт здесь даёт стандартную
ссылку
otpauth:// и
сканируемый QR-код, а это ровно то, что такие
приложения принимают.
Работает ли с Microsoft Authenticator?
Нет. Microsoft Authenticator не умеет экспортировать секреты TOTP и не показывает их QR-кодом, так что расшифровывать нечего.
Работает ли со Steam Guard?
Нет. Steam хранит общий секрет в своём
собственном формате файла, а не в QR-коде
otpauth://,
поэтому этот инструмент здесь не применим.
Это открытый код?
Да, лицензия MIT. Полные исходники — github.com/VizzleTF/TOTP_decoder.