Hash Identifier

Определение типа хеша по длине и формату — MD5, SHA-1, SHA-256 и многое другое

Строка хеша

Работает локально · Безопасно вставлять секреты

Что такое идентификация хешей?

Идентификация хешей — это процесс определения того, какой криптографический алгоритм хеширования создал данный дайджест. Криптографические хеш-функции, такие как MD5, SHA-1 и SHA-256, производят вывод фиксированной длины, и именно длина вывода является основным признаком для идентификации неизвестного хеша. Когда вы встречаете шестнадцатеричную строку в дампе базы данных, конфигурационном файле или ответе API, инструмент идентификации хешей укажет, какой алгоритм её скорее всего сгенерировал.

Каждый алгоритм хеширования преобразует произвольные входные данные в вывод фиксированного размера, называемый дайджестом. MD5 всегда производит 128 бит (32 hex-символа), SHA-1 — 160 бит (40 hex-символов), SHA-256 — 256 бит (64 hex-символа). Эта детерминированная длина вывода и делает алгоритмическую идентификацию возможной без доступа к исходным данным или коду хеширования.

Идентификация только по длине не всегда однозначна. Несколько алгоритмов могут иметь одинаковый размер вывода — например, SHA-256 и SHA3-256 оба производят hex-дайджесты из 64 символов. В таких случаях инструмент идентификации возвращает список алгоритмов-кандидатов, ранжированных по распространённости. Контекстные подсказки — исходная система, формат кодирования (hex или Base64), наличие префиксов алгоритма (например, '$2b$' для bcrypt) — позволяют сузить список кандидатов.

Зачем использовать идентификатор хешей?

Неизвестные хеши регулярно встречаются при проведении аудитов безопасности, миграции баз данных и криминалистическом анализе. Идентификатор хешей устраняет необходимость угадывать алгоритм и за секунды указывает на правильный вариант.

Мгновенное определение
Вставьте хеш и немедленно получите алгоритмы-кандидаты. Не нужно вручную считать символы или обращаться к справочным таблицам — инструмент автоматически сопоставляет длину hex-строки со всеми подходящими алгоритмами.
🔒
Анализ с приоритетом конфиденциальности
Вся идентификация выполняется исключительно в вашем браузере с помощью JavaScript. Значение хеша никогда не покидает ваше устройство, что особенно важно при анализе хешей паролей, токенов аутентификации или чувствительных криминалистических данных.
📋
Полное покрытие алгоритмов
Определяет MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 и их аналоги из семейства SHA-3. Справочная таблица охватывает полные семейства SHA-2 и SHA-3, а также распространённые альтернативы — RIPEMD-160 и BLAKE2.
🚫
Без регистрации и установки
Работает мгновенно в любом современном браузере. Без регистрации, без API-ключа, без необходимости устанавливать CLI-инструменты. Добавьте в закладки и используйте при каждой встрече с неизвестным хешем — на любой ОС и любом устройстве.

Сценарии использования идентификатора хешей

Аудит безопасности
При проведении тестов на проникновение идентификация алгоритмов хешей паролей в утечках баз данных определяет подход к взлому. Хеши MD5 и SHA-1 свидетельствуют о слабой защите и могут быть приоритизированы для устранения уязвимостей.
Миграция баз данных
При переносе пользовательских записей между системами необходимо знать алгоритм хранимых хешей паролей, чтобы правильно настроить новый уровень аутентификации. Неверная идентификация алгоритма приведёт к отказу всех входов в систему.
DevOps и CI/CD
Сборочные конвейеры часто включают контрольные суммы для верификации артефактов. Определение того, является ли контрольная сумма SHA-256 или SHA-512, позволяет использовать корректную команду верификации в скриптах развёртывания.
Цифровая криминалистика
Криминалисты встречают хеш-дайджесты в журналах целостности файлов, записях блокчейна и метаданных доказательств. Идентификация алгоритма является предварительным условием для верификации цепочки хранения доказательств.
Интеграция с API
Сторонние API иногда возвращают хеш-значения без документирования алгоритма. Определение типа хеша из ответа позволяет правильно настроить верификацию подписи вебхука или валидацию контрольной суммы.
Изучение криптографии
Студенты, проходящие курсы по криптографии, могут вставлять хеши, сгенерированные различными алгоритмами, и сразу видеть взаимосвязь между выбором алгоритма, длиной вывода и свойствами безопасности.

Справочник по длинам хеш-алгоритмов

Таблица ниже сопоставляет каждый распространённый хеш-алгоритм с размером его вывода в битах, hex-символах и байтах. Это основная справочная таблица, используемая инструментами идентификации хешей. Когда несколько алгоритмов имеют одинаковую длину hex-вывода, для их различения необходим дополнительный контекст.

АлгоритмБитыHex-символыБайтыПримечания
MD51283216Broken — collisions trivial since 2004
SHA-11604020Deprecated — SHAttered attack (2017)
SHA-2242245628Truncated SHA-256; rarely used standalone
SHA-2562566432Current standard; TLS, Git, Bitcoin
SHA-3843849648Truncated SHA-512; CNSA Suite approved
SHA-51251212864Maximum SHA-2 output; large-data hashing
SHA3-2562566432Keccak-based; NIST alternative to SHA-2
SHA3-51251212864Keccak-based; highest SHA-3 strength
RIPEMD-1601604020Used in Bitcoin address derivation
BLAKE2s2566432Faster than SHA-256; 256-bit output

Разграничение длин хешей

Некоторые длины hex-строк соответствуют нескольким алгоритмам. Наиболее распространены два случая неоднозначности: 64-символьные хеши (SHA-256 против SHA3-256) и 40-символьные хеши (SHA-1 против RIPEMD-160). Ниже описано, как их различить, когда одной длины недостаточно.

64 hex-символа: SHA-256 против SHA3-256
Оба алгоритма производят 256-битные (64-символьные) дайджесты. SHA-256 несравнимо более распространён на практике — коммиты Git, TLS-сертификаты, блоки Bitcoin и большинство подписей API используют SHA-256. SHA3-256 встречается, как правило, только в системах, которые явно требуют соответствия NIST SP 800-185 или конструкциям на основе Keccak. Для подтверждения следует обратиться к документации исходной системы.
40 hex-символов: SHA-1 против RIPEMD-160
SHA-1 — значительно более распространённый 160-битный хеш: исторически использовался в Git (до перехода на SHA-256), TLS и подписи кода. RIPEMD-160 встречается преимущественно при генерации адресов Bitcoin (HASH160 = SHA-256, за которым следует RIPEMD-160). Если хеш получен в контексте криптовалют, следует рассмотреть RIPEMD-160; в остальных случаях вероятнее всего это SHA-1.

Примеры кода

Ниже представлены рабочие реализации идентификации хешей по длине hex-строки на четырёх языках программирования. Каждая функция проверяет hex-кодирование, выполняет поиск по количеству символов и возвращает все подходящие алгоритмы.

JavaScript
function identifyHash(hex) {
  const len = hex.length
  const isHex = /^[0-9a-fA-F]+$/.test(hex)
  if (!isHex) return ['Not a hex-encoded hash']

  const map = {
    32:  ['MD5'],
    40:  ['SHA-1', 'RIPEMD-160'],
    56:  ['SHA-224', 'SHA3-224'],
    64:  ['SHA-256', 'SHA3-256', 'BLAKE2s'],
    96:  ['SHA-384', 'SHA3-384'],
    128: ['SHA-512', 'SHA3-512', 'BLAKE2b'],
  }
  return map[len] || [`Unknown (${len} hex chars)`]
}

identifyHash('d41d8cd98f00b204e9800998ecf8427e')
// → ["MD5"]

identifyHash('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
// → ["SHA-256", "SHA3-256", "BLAKE2s"]
Python
import re

HASH_LENGTHS = {
    32:  ['MD5'],
    40:  ['SHA-1', 'RIPEMD-160'],
    56:  ['SHA-224', 'SHA3-224'],
    64:  ['SHA-256', 'SHA3-256', 'BLAKE2s'],
    96:  ['SHA-384', 'SHA3-384'],
    128: ['SHA-512', 'SHA3-512', 'BLAKE2b'],
}

def identify_hash(hex_string: str) -> list[str]:
    hex_string = hex_string.strip()
    if not re.fullmatch(r'[0-9a-fA-F]+', hex_string):
        return ['Not a hex-encoded hash']
    return HASH_LENGTHS.get(len(hex_string), [f'Unknown ({len(hex_string)} hex chars)'])

identify_hash('da39a3ee5e6b4b0d3255bfef95601890afd80709')
# → ['SHA-1', 'RIPEMD-160']

identify_hash('a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a')
# → ['SHA-256', 'SHA3-256', 'BLAKE2s']
Go
package main

import (
	"fmt"
	"regexp"
)

var hexPattern = regexp.MustCompile("^[0-9a-fA-F]+$")

var hashLengths = map[int][]string{
	32:  {"MD5"},
	40:  {"SHA-1", "RIPEMD-160"},
	56:  {"SHA-224", "SHA3-224"},
	64:  {"SHA-256", "SHA3-256", "BLAKE2s"},
	96:  {"SHA-384", "SHA3-384"},
	128: {"SHA-512", "SHA3-512", "BLAKE2b"},
}

func identifyHash(hex string) []string {
	if !hexPattern.MatchString(hex) {
		return []string{"Not a hex-encoded hash"}
	}
	if algos, ok := hashLengths[len(hex)]; ok {
		return algos
	}
	return []string{fmt.Sprintf("Unknown (%d hex chars)", len(hex))}
}

func main() {
	fmt.Println(identifyHash("d41d8cd98f00b204e9800998ecf8427e"))
	// → [MD5]
}
CLI (Bash)
#!/bin/bash
# Identify a hash from the command line by character count
hash="$1"

if [[ ! "$hash" =~ ^[0-9a-fA-F]+$ ]]; then
  echo "Not a hex-encoded hash"
  exit 1
fi

len=${#hash}
case $len in
  32)  echo "MD5 (128-bit)" ;;
  40)  echo "SHA-1 or RIPEMD-160 (160-bit)" ;;
  56)  echo "SHA-224 or SHA3-224 (224-bit)" ;;
  64)  echo "SHA-256 or SHA3-256 (256-bit)" ;;
  96)  echo "SHA-384 or SHA3-384 (384-bit)" ;;
  128) echo "SHA-512 or SHA3-512 (512-bit)" ;;
  *)   echo "Unknown hash length: $len chars" ;;
esac

# Usage: ./identify.sh d41d8cd98f00b204e9800998ecf8427e
# → MD5 (128-bit)

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

Как работает идентификация хешей?
Идентификация хешей основывается прежде всего на длине hex-кодированного дайджеста. Каждый алгоритм хеширования производит фиксированное количество выходных битов: MD5 — 128 бит (32 hex-символа), SHA-1 — 160 бит (40 hex-символов), SHA-256 — 256 бит (64 hex-символа) и так далее. Идентификатор измеряет длину строки, проверяет, что она содержит только шестнадцатеричные символы, и сопоставляет её с известными размерами вывода алгоритмов.
Может ли идентификатор хешей однозначно определить алгоритм?
Не всегда. Несколько алгоритмов могут давать вывод одинаковой длины. SHA-256 и SHA3-256 оба выводят 64 hex-символа. SHA-1 и RIPEMD-160 оба выводят 40 hex-символов. В таких случаях инструмент возвращает всех кандидатов. Для сужения до единственного алгоритма необходим контекст — исходная система, документация или префиксы алгоритма.
Что делать, если мой хеш закодирован в Base64 вместо hex?
Хеши в кодировке Base64 используют другой набор символов (A-Z, a-z, 0-9, +, /) и имеют длину, отличную от их hex-эквивалентов. 256-битный хеш занимает 44 символа в Base64, но 64 символа в hex. Сначала декодируйте строку Base64 в байты, затем проверьте длину в байтах: 16 байт = MD5, 20 байт = SHA-1, 32 байта = SHA-256, 48 байт = SHA-384, 64 байта = SHA-512.
Безопасно ли вставлять хеши паролей в онлайн-идентификатор?
Этот инструмент работает полностью в вашем браузере — никакие данные не передаются на сервер. Хеш никогда не покидает ваше устройство. Тем не менее для максимальной операционной безопасности при проведении официального аудита вы можете убедиться в этом, проверив вкладку сети в инструментах разработчика браузера или использовав инструмент в офлайн-режиме после загрузки страницы.
Почему MD5 до сих пор используется, если он криптографически скомпрометирован?
MD5 скомпрометирован с точки зрения стойкости к коллизиям — злоумышленник может создать два разных входных значения, дающих одинаковый хеш. Однако MD5 по-прежнему применяется в неформатных контекстах: контрольные суммы файлов для верификации загрузок, ключи кеша, дедупликация и ETag в HTTP. Для этих целей случайные коллизии практически невозможны, а намеренные атаки не являются угрозой. MD5 не должен использоваться для хеширования паролей, цифровых подписей или верификации сертификатов.
Как идентифицировать хеши bcrypt, scrypt или Argon2?
Функции хеширования паролей, такие как bcrypt, scrypt и Argon2, используют характерные строковые префиксы вместо сырого hex-вывода. Хеши bcrypt начинаются с '$2a$', '$2b$' или '$2y$', за которыми следует коэффициент стоимости. Хеши Argon2 начинаются с '$argon2id$' или '$argon2i$'. Хеши scrypt, как правило, начинаются с '$scrypt$'. Это не сырые криптографические дайджесты, поэтому идентификация по длине к ним не применима — сам префикс и идентифицирует алгоритм.
В чём разница между SHA-2 и SHA-3?
SHA-2 (включает SHA-256, SHA-384 и SHA-512) основан на конструкции Merkle-Damgård, разработанной АНБ и стандартизированной в FIPS 180-4. SHA-3 (SHA3-256, SHA3-384, SHA3-512) основан на губчатой конструкции Keccak, выбранной по результатам открытого конкурса NIST и стандартизированной в FIPS 202. Они производят вывод одинаковой длины при соответствующих уровнях безопасности, но используют принципиально разные внутренние структуры. SHA-3 был разработан как запасной вариант на случай обнаружения структурных уязвимостей в SHA-2, хотя до сих пор таких уязвимостей выявлено не было.