Генератор хеша SHA-1

Получайте 160-битный хеш SHA-1 текста, hex-байтов или файла прямо во время ввода. Сверьте его с опубликованной контрольной суммой и сразу посмотрите SHA-256, SHA-512 и MD5 тех же данных.

Все алгоритмы

Работает полностью в браузере. Данные никуда не загружаются.

Как пользоваться

  1. Введите текст, переключите формат ввода на «Hex», чтобы ввести байты, или нажмите «Открыть файл».
  2. SHA-1 уже выбран; если хотите сравнить его с другой хеш-функцией, измените значение параметра «Алгоритм».
  3. Выберите «hex (нижний регистр)», как выводят sha1sum и Git, «HEX (верхний регистр)» или «Base64».
  4. Вставьте ожидаемый SHA-1 в поле «Сравнить с»: страница покажет «Совпадает» или «Не совпадает».

Что такое SHA-1?

SHA-1 (Secure Hash Algorithm 1) разработан АНБ и опубликован NIST в 1995 году как FIPS 180-1 на замену просуществовавшему недолго SHA-0. Сейчас он описан в FIPS 180-4, а RFC 3174 излагает его вместе с примером кода на C. SHA-1 обрабатывает блоки по 512 бит за 80 раундов и выдаёт 160-битный хеш: 40 шестнадцатеричных символов или 28 символов Base64.

Как и любой хеш, SHA-1 работает только в одну сторону. Хеш нельзя расшифровать, можно лишь найти совпадение, хешируя предполагаемые варианты. Именно так массово взломали хеши паролей SHA-1 без соли, утёкшие из LinkedIn в 2012 году; пароли следует хранить с помощью Argon2, scrypt, bcrypt или PBKDF2.

SHAttered: почему SHA-1 признан устаревшим

В феврале 2017 года исследователи из CWI Amsterdam и Google опубликовали SHAttered — первую реальную коллизию SHA-1: два разных PDF-файла с одинаковым хешем, найденные примерно за 2^63 вычислений SHA-1. В 2020 году Gaëtan Leurent и Thomas Peyrin (работа «SHA-1 is a Shambles») с помощью коллизии с выбранным префиксом продемонстрировали подделку подписей SHA-1 на ключах PGP, причём стоимость атаки вполне по силам хорошо финансируемому злоумышленнику.

  • Публичные удостоверяющие центры перестали выпускать сертификаты TLS с SHA-1 в 2016 году, а браузеры перестали им доверять в начале 2017 года.
  • NIST запрещает использовать SHA-1 для новых цифровых подписей с 2013 года и планирует полностью отказаться от него к концу 2030 года.
  • Большинство репозиториев Git по-прежнему идентифицируют объекты по SHA-1, который вычисляется усиленной реализацией, распознающей попытки создать коллизию; кроме того, Git умеет создавать репозитории на основе SHA-256.

Коллизии не позволяют взломать HMAC, поэтому HMAC-SHA1 до сих пор встречается в кодах TOTP и старых подписях вебхуков; вычислить его можно в генераторе HMAC. Для всего нового выбирайте SHA-256.

Идентификаторы объектов Git, Base64 и кодировка текста

Идентификатор blob в Git — это не SHA-1 одного лишь файла. Git хеширует заголовок из слова blob, пробела, размера в байтах и нулевого байта, а за ним — содержимое. Чтобы воспроизвести такой идентификатор здесь, переключите формат ввода на «Hex» и добавьте байты заголовка: для hello с переводом строки ввод в hex выглядит так: 626c6f6220360068656c6c6f0a.

$ printf 'hello\n' | sha1sum
f572d396fae9206628714fb2ce00f72e94f2258f  -
$ printf 'hello\n' | git hash-object --stdin
ce013625030ba8dba906f756967f9e9ca394464a

SHA-1 обычно показывают в hex в нижнем регистре. Base64 встречается в рукопожатии WebSocket, где Sec-WebSocket-Accept — это SHA-1 ключа клиента с добавленным фиксированным GUID, записанный в Base64, а также в значениях паролей LDAP {SHA}. Помните, что хеш вычисляется от байтов: у текста с диакритическими знаками один SHA-1 в UTF-8 и другой в Windows-1252.

SHA-1 в командной строке и в коде

sha1sum file.zip                          # Linux
shasum file.zip                           # macOS (SHA-1 по умолчанию)
certutil -hashfile file.zip SHA1          # Windows
Get-FileHash file.zip -Algorithm SHA1     # PowerShell

# Python
hashlib.sha1(data).hexdigest()

// Node.js
crypto.createHash('sha1').update(data).digest('hex')

Эта страница вычисляет SHA-1 с помощью встроенного в браузер Web Crypto API, поэтому входные данные не покидают ваше устройство. Таблица «Все алгоритмы» показывает значения MD5, SHA-256, SHA-384, SHA-512 и CRC для тех же входных данных.

Примеры

Исходные данные (UTF-8)SHA-1
Hello, World!0a0a9f2a6772942557ab5355d76af442f8f65e01
Base64.is6c667ee2efd2020349eed40efa07c26683f613c8
你好440ee0853ad1e99f962b63e459ef992d7c211722

Часто задаваемые вопросы

Безопасно ли использовать SHA-1 сегодня?

Нет, если злоумышленник может выбирать входные данные или влиять на них, как в случае подписей и сертификатов: коллизии SHA-1 можно получить на практике. Случайные повреждения он по-прежнему обнаруживает, а на HMAC-SHA1 коллизии не влияют. Для новых задач используйте SHA-256 или SHA-512.

Можно ли обратить хеш SHA-1?

Нет. Ключа нет, и расшифровывать нечего. Сайты поиска по хешам находят только те входные данные, которые уже есть в их таблицах распространённых слов и утёкших паролей. Поэтому длинным случайным данным они не страшны, а вот короткому паролю — опасны.

Какой длины хеш SHA-1?
160 бит, или 20 байт: 40 hex-символов или 28 символов Base64 с одним = на конце. Такую же длину имеет RIPEMD-160, а хеши паролей MySQL 4.1+ — это звёздочка и 40 hex-символов. Определитель типа хеша перечислит возможные варианты для заданной строки.
Как проверить файл по опубликованному SHA-1?

Откройте файл и вставьте опубликованное значение в поле «Сравнить с». Принимается hex в верхнем или нижнем регистре и Base64, а страница покажет «Совпадает» или «Не совпадает».

Чем SHA-1 отличается от SHA-256?

Оба алгоритма опубликованы NIST, но SHA-256 относится к более новому семейству SHA-2, выдаёт 256-битный результат и не имеет известных практических атак. У SHA-1 результат короче, а стойкость к коллизиям у него уже нарушена.