Как перевести Base32 в Base64
- Вставьте Base32 в поле Ввод · Base32 (RFC 4648). Пробелы между группами, нижний регистр и отсутствие
=не мешают. - Base64 появится в поле Результат · Base64. Снимите флажок Дополнение (=) под результатом, если получателю не нужны
=, или настройте Перенос строк для длинных значений. - Нажмите Скопировать результат. Обратное направление включает кнопка Base64 → Base32 (RFC 4648) в переключателе направления; для него есть и отдельная страница Base64 в Base32.
Примеры
| Base32 | Base64 | Примечание |
|---|---|---|
JBSWY3DPEHPK3PXP | SGVsbG8h3q2+7w== | Пример ключа из документации Google Authenticator по формату URI, 10 байт |
jbsw y3dp ehpk 3pxp | SGVsbG8h3q2+7w== | Тот же ключ, сгруппированный так, как его показывают приложения |
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ | MTIzNDU2Nzg5MDEyMzQ1Njc4OTA= | Тестовый секрет из RFC 6238, 20 цифр ASCII |
RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K | iEwO+V01Llzjb4MxBUtgEuCNW8o= | 20 случайных на вид байт |
MZXW6YQ | Zm9vYg== | Ввод без дополнения; с дополнением – MZXW6YQ= |
Первый ключ декодируется в байты 48 65 6c 6c 6f 21 de ad be ef: слово Hello!, за которым идёт de ad be ef. Поэтому его Base64 начинается с SGVsbG8h, то есть с Base64 от Hello!.
Зачем переводить секрет 2FA в Base64
Форма Base32 существует для людей: она попадает в QR-коды и на экраны настройки, и её можно набрать на телефоне. Коду и конфигурации обычно нужен «сырой» ключ, а сырые байты в JSON, YAML, переменных окружения и базах данных привычно хранят в Base64. Типичные случаи:
- Перенос аккаунтов TOTP из выгруженного списка ссылок
otpauth://в систему, которая хранит секреты в Base64. - Передача ключа функции или библиотеке HMAC, которая принимает Base64 или байты, например при проверке кодов на собственном сервере.
- Сравнение двух копий секрета. Разная группировка, регистр или дополнение одного и того же Base32 дают одну строку Base64, так что одинаковый результат означает одинаковые ключи.
Кодирование ничего не защищает. Секрет в Base64 ровно так же чувствителен, как в Base32, так что храните его там же, где хранили бы пароль.
Base32 в Base64 на Python
b32decode в Python строг к регистру и дополнению, поэтому сначала нормализуйте строку:
import base64
def b32_to_b64(secret):
s = secret.replace(" ", "").upper()
s += "=" * (-len(s) % 8)
return base64.b64encode(base64.b32decode(s)).decode()
b32_to_b64("jbsw y3dp ehpk 3pxp") # 'SGVsbG8h3q2+7w=='
Без вызова .upper() Python выбросит binascii.Error: Non-base32 digit found, без строки с дополнением – Incorrect padding. Остальное о Base64 в Python есть в статье Base64 в Python.
Типичные проблемы
- Ошибка на
9,8,1или0. Этих цифр нет в Base32 по RFC 4648. Скорее всего, значение в base32hex или Crockford; например, на91IMOR3Fэта страница выдаёт ошибку в позиции 1. Декодируйте его в декодере Base32, выбрав нужный алфавит в меню Из. - Ошибка на
-. Некоторые сайты показывают ключи, разбитые дефисами. Уберите их: пропускаются только пробельные символы. - Base64 правильный, но сервер отвергает коды. Проверьте остальные параметры: алгоритм, число цифр и период должны совпадать с обеих сторон, а часы сервера должны идти примерно так же, как на телефоне.
Вопросы и ответы
Как перевести ключ Google Authenticator в Base64?
Возьмите ключ из параметра secret= ссылки otpauth:// (или текстовый ключ под QR-кодом) и вставьте его сюда. JBSWY3DPEHPK3PXP превращается в SGVsbG8h3q2+7w==.
Почему Base64 короче, чем Base32?
Base64 хранит 6 бит на символ, а Base32 – 5, поэтому тем же байтам нужно меньше символов Base64: 20 байт занимают 32 символа Base32, но только 28 символов Base64.
Можно ли здесь конвертировать base32hex или Crockford Base32?
Эта страница читает только Base32 по RFC 4648. Откройте декодер Base32, выберите в меню Из вариант Base32hex или Crockford Base32, а в меню В – Base64.
Как перевести Base32 в Base64 в командной строке?
С GNU coreutils: printf 'JBSWY3DPEHPK3PXP' | base32 -d | base64. Ввод должен быть в верхнем регистре и без пробелов; почистить его заранее можно через tr -d ' ' | tr a-z A-Z.