Как получить хеш SHA-256 в Base64
- В поле Алгоритм выбран SHA-256; остальные кнопки переключают на MD5, SHA-1, SHA-384 или SHA-512.
- Когда в поле Источник выбран Текст, введите или вставьте данные в поле Текст. Формат ввода определяет, как читать этот текст: как текст UTF-8 или как байты в hex или Base64, если нужно захешировать двоичные данные, которые у вас уже есть в закодированном виде.
- Скопируйте результат в Hex, Base64 или Base64URL. Все алгоритмы показывает все хеши одного и того же ввода.
- Чтобы захешировать файлы, переключите Источник на Файл и перетащите один или несколько. Для каждого файла выводится свой результат. Для файлов больше 200 МБ SHA-256 и MD5 считаются кусками по 8 МБ с индикатором прогресса, так что большой файл никогда не нужно целиком держать в памяти.
Хеш обновляется по мере ввода. HMAC и SRI вверху переключают на хеши с ключом и теги Subresource Integrity.
Примеры хешей
| Ввод | SHA-256 (hex) | SHA-256 (Base64) |
|---|---|---|
| пустая строка | e3b0c442…7852b855 | 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= |
hello | 2cf24dba…938b9824 | LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ= |
hello + перевод строки | 5891b5b5…46f6be03 | WJG1tSLV3whtD/CxEPvZ0hu0/HFjrzTQgoai6Eb2vgM= |
The quick brown fox jumps over the lazy dog | d7a8fbb3…37c9e592 | 16j7swfXgJRpypq8sAguT41WUeRtPNt2LQLQvzfJ5ZI= |
Вторая и третья строки показывают ловушку, из-за которой происходит большинство несовпадений: один невидимый перевод строки даёт совершенно другой хеш. Кроме того, в текстовом поле браузера окончания строк превращаются в LF, так что файлы с окончаниями CRLF перетаскивайте целиком, а не вставляйте их содержимое.
Где SHA-256 встречается в Base64
Традиционно хеш печатают в hex, но многие форматы используют Base64, потому что он короче:
- Хеши в Content Security Policy для встроенных скриптов:
script-src 'sha256-…'. - Subresource Integrity:
integrity="sha256-…", хотя там чаще выбирают SHA-384. - HTTP-заголовок
Content-Digest(RFC 9530):Content-Digest: sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:для тела{"hello": "world"}. Двоеточия в структурированных заголовках обозначают двоичное значение. - Контрольные суммы облачных хранилищ, например заголовок
x-amz-checksum-sha256в Amazon S3, в котором передаётся хеш в Base64. - Lock-файлы и менеджеры пакетов: поле
integrityвpackage-lock.json(обычноsha512-…) и хеши в стиле SRI в Nix.
Дайджесты образов Docker и OCI (sha256:…) и Git используют hex. Когда нужно сравнить значения из разных систем, конвертируйте их через hex в Base64 или Base64 в hex, а не хешируйте заново.
SHA-256 в Base64 в коде и командной строке
printf 'hello' | openssl dgst -sha256 -binary | base64
sha256sum file.bin | cut -d' ' -f1 | xxd -r -p | base64
Флаг -binary важен: без него OpenSSL печатает hex-текст, и Base64 от этого текста превращается в 88 бессмысленных символов.
import base64, hashlib
digest = hashlib.sha256(b"hello").digest()
print(base64.b64encode(digest).decode())
В Node.js crypto.createHash("sha256").update("hello").digest("base64") возвращает тот же LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=, а "base64url" даёт URL-safe вариант. Простой хеш не подписывает данные: пересчитать его может кто угодно. Чтобы доказать, что сообщение пришло от владельца ключа, используйте HMAC. Примеры кода собраны на страницах Base64 в Python и OpenSSL.
Вопросы и ответы
Почему мой SHA-256 не совпадает с тем, что выдаёт командная строка?
Почти всегда виноват перевод строки в конце. echo hello выводит шесть байтов: hello и \n, поэтому его хеш отличается от хеша hello. В оболочке используйте printf 'hello' или echo -n hello либо сравнивайте с файлом, перетащенным сюда.
Какой длины хеш SHA-256 в Base64?
44 символа с одним = в конце или 43 в Base64URL без дополнения. В hex это 64 символа. Если получилось 88 символов, в Base64 закодировали hex-текст, а не сам хеш.
Можно ли перевести hex-строку SHA-256 в Base64?
Да, байты хеша те же. Вставьте 64 hex-символа в hex в Base64 или в оболочке пропустите hex через xxd -r -p и передайте в base64.
Можно ли расшифровать SHA-256 обратно в исходный текст?
Нет. Хеш служит односторонним отпечатком, декодировать там нечего. Декодирование Base64 даст только 32 байта хеша; чем это отличается от кодирования, объясняет статья Base64 – не шифрование.