Как перевести Base64 в hex
- Вставьте Base64 в поле Ввод · Base64. Переносы строк, пробелы, отсутствующее дополнение
=и URL-safe символы допускаются. - Байты появятся в поле Результат · Hex. Если байты похожи на известный формат, строка статуса покажет тип файла в поле Похоже на.
- Под результатом выберите Регистр, Разделитель и Байтов в строке.
- Нажмите Скопировать результат или Скачать, чтобы сохранить hex. Сохранить байты записывает в файл сами декодированные байты.
Для обратного направления используйте переключатель Hex → Base64 или страницу hex в Base64.
Настройки вывода
Base64 SGkh/w== содержит четыре байта. Настройка Разделитель определяет, как они записываются:
| Разделитель | Результат | Для чего |
|---|---|---|
| Нет | 486921ff | сравнение с выводом sha256sum, базы данных, URL |
| Пробел | 48 69 21 ff | чтение по байтам, hex-редакторы |
: | 48:69:21:ff | отпечатки сертификатов и ключей |
0x | 0x48 0x69 0x21 0xff | константы в C, C# или Java |
\x | \x48\x69\x21\xff | строковые литералы в Python, C и shell |
Регистр переключает вывод на 48 69 21 FF. Если выбрать 16 в поле Байтов в строке, получится привычный дамп по 16 байт в ряд, где легко найти смещение 0x40 или посчитать длину заголовка.
Как читать первые байты
Большинство форматов файлов начинается с постоянной сигнатуры, и в hex такие сигнатуры легко узнать. Несколько префиксов Base64 и во что они декодируются:
| Base64 начинается с | Hex | Формат |
|---|---|---|
iVBORw0KGgo | 89 50 4e 47 0d 0a 1a 0a | PNG |
/9j/ | ff d8 ff | JPEG |
JVBERi0 | 25 50 44 46 2d (%PDF-) | |
UEsDBA | 50 4b 03 04 (PK) | ZIP, а также DOCX, XLSX, JAR, APK |
H4sI | 1f 8b 08 | gzip |
Если первые байты не совпадают ни с одной из сигнатур, это всё ещё может быть текст в неожиданной кодировке или зашифрованные данные, которые в hex выглядят равномерно случайными. Намного больше примеров собрано в списке распространённых префиксов Base64. Если окажется, что внутри файл, который хочется открыть, Base64 в файл покажет и сохранит его.
Сравнение дайджестов и контрольных сумм
Утилиты контрольных сумм печатают именно hex, поэтому через hex удобно сравнить значение из заголовка или конфигурационного файла с результатом своего md5sum или sha256sum:
| Где встречается | Base64 | Hex |
|---|---|---|
Заголовок Content-MD5 для hello | XUFAKrxLKna5cZ2REBfFkg== | 5d41402abc4b2a76b9719d911017c592 |
SHA-256 от hello | LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ= | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
То же относится к атрибутам integrity="sha384-…", отпечаткам SSH в виде SHA256: (Base64 без дополнения) и двоичным ключам в JSON. Если два значения различаются в hex, различаются и байты; если совпадают, любая разница в Base64 была только в оформлении: в дополнении или URL-safe алфавите.
Base64 в hex в коде
import base64
base64.b64decode("SGkh/w==").hex() # '486921ff'
base64.b64decode("SGkh/w==").hex(" ") # '48 69 21 ff'
Buffer.from("SGkh/w==", "base64").toString("hex"); // '486921ff'
В Python b64decode молча отбрасывает символы вне алфавита, если не передать validate=True, поэтому URL-safe строка может без всякой ошибки декодироваться в неверные байты. Декодер "base64" в Node принимает оба алфавита. Подробности есть на страницах Python и Node.js.
Вопросы и ответы
Как декодировать Base64 в hex в Linux?
echo 'SGkh/w==' | base64 -d | xxd -p выводит 486921ff. xxd -p переносит строки через каждые 30 байт; добавьте -c 32, чтобы получить 32 байта в строке, или используйте od -An -tx1, если xxd не установлен.
Откуда в моём hex берётся ef bf bd?
Эти три байта кодируют в UTF-8 символ замены �. Какой-то инструмент сначала декодировал Base64 в текст и заменил каждый байт, недопустимый в UTF-8. Декодируйте сразу в hex, как эта страница, и исходные байты останутся на месте.
Насколько hex длиннее, чем Base64?
Примерно в 1,5 раза. Четыре символа Base64 вмещают три байта, а это шесть hex-цифр. Значение SHA-256 из 44 символов превращается в 64 hex-цифры.
Принимаются ли Base64URL и data URI?
Да. - и _ читаются как + и /, отсутствие дополнения не мешает, а префикс data:...;base64, пропускается.