Как получить хеш MD5 в Base64
- В списке Алгоритм уже выбран MD5.
- Для файла переключите Источник на Файл и перетащите его; можно и несколько сразу, у каждого будет свой результат. Файлы больше 200 МБ читаются частями по 8 МБ с индикатором прогресса в процентах.
- Для текста оставьте Источник на Текст и введите или вставьте его. Формат ввода позволяет хешировать данные в hex или Base64 как «сырые» байты, а не как текст UTF-8.
- Скопируйте значение Base64 для заголовков и API или Hex, чтобы сравнить с выводом
md5sum. Оба описывают одни и те же 16 байт.
Инструмент показывает короткое предупреждение, что MD5 не годится для задач безопасности. Это правда, но на контрольные суммы не влияет.
Hex или Base64: те же 16 байт
| Ввод | MD5 (hex) | MD5 (Base64) |
|---|---|---|
| пусто | d41d8cd98f00b204e9800998ecf8427e | 1B2M2Y8AsgTpgAmY7PhCfg== |
hello | 5d41402abc4b2a76b9719d911017c592 | XUFAKrxLKna5cZ2REBfFkg== |
The quick brown fox jumps over the lazy dog | 9e107d9d372bb6826bd81d3542a419d6 | nhB9nTcrtoJr2B01QqQZ1g== |
Чаще всего с Content-MD5 ошибаются, кодируя в Base64 hex-текст. Для фразы про лису это даёт OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY=: 44 символа, которые не примет ни один сервер. Длина выдаёт ошибку с первого взгляда: при 24 символах всё правильно, при 44 по ошибке закодирован hex.
Где ждут MD5 в Base64
- Заголовки запросов
Content-MD5(RFC 1864). Amazon S3 проверяет его при загрузке, Azure Blob Storage тоже и возвращает ошибку, если тело не совпадает. - Google Cloud Storage отдаёт
md5Hashобъекта в Base64, аgsutil hashпечатает Base64, если не передать-hдля hex. - Свойства Azure Blob тоже хранят
Content-MD5в Base64. - Старые API и почтовые системы, которые переняли этот заголовок ещё до появления контрольных сумм на основе SHA.
В других местах остаётся hex: md5sum, большинство страниц загрузки и ETag у S3-объекта, загруженного одной частью (это hex MD5 в кавычках). ETag составных (multipart) загрузок в S3 заканчиваются на - и число частей и вообще не равны MD5 от всего файла, так что с результатом этого инструмента они никогда не совпадут.
MD5 в Base64 в командной строке и в коде
openssl md5 -binary file.bin | base64
md5sum file.bin | cut -d' ' -f1 | xxd -r -p | base64
import base64, hashlib
with open("file.bin", "rb") as f:
digest = hashlib.file_digest(f, "md5").digest()
print(base64.b64encode(digest).decode())
hashlib.file_digest требует Python 3.11 или новее; в более старых версиях читайте файл частями и вызывайте update(). В Node.js crypto.createHash("md5").update(buffer).digest("base64") сразу даёт Base64. Если более новый API предлагает контрольную сумму SHA-256, выбирайте её; SHA-256 в Base64 выдаёт такие значения тем же способом. Больше фрагментов кода есть на страницах про OpenSSL и Python.
Вопросы и ответы
Что такое заголовок Content-MD5?
HTTP-заголовок из RFC 1864, который содержит Base64 от 16-байтового дайджеста MD5 тела запроса. Хранилища вроде Amazon S3 и Azure Blob Storage используют его, чтобы отвергать загрузки, повреждённые при передаче.
Почему мой MD5 в Base64 длиной 44 символа?
Вы закодировали 32-символьную hex-строку вместо 16 «сырых» байтов. Правильный MD5 в Base64 всегда занимает 24 символа и заканчивается на ==. Перед кодированием получайте хеш в двоичном виде (-binary в OpenSSL, .digest() в Python).
Как перевести контрольную сумму MD5 из hex в Base64?
Декодируйте hex в байты и закодируйте их в Base64: 9e107d9d372bb6826bd81d3542a419d6 превращается в nhB9nTcrtoJr2B01QqQZ1g==. Конвертер hex в Base64 сделает это за одну вставку.
Безопасно ли ещё использовать MD5?
Для поиска случайных повреждений да. Там, где на данные может повлиять злоумышленник, нет: коллизии MD5 строятся на обычном ноутбуке, так что у двух разных файлов может оказаться один хеш. Для защиты целостности от подмены используйте SHA-256, а для паролей специальный хеш вроде Argon2 или bcrypt.