MD5 Hash Generator
Генерує хеш MD5 з будь-якого тексту
Вхідний текст
Хеш MD5
Хеш MD5 з'явиться тут…
Що таке хешування MD5?
MD5 (Message-Digest Algorithm 5) — це криптографічна хеш-функція, яка генерує фіксований 128-бітний (16-байтний) дайджест з будь-якого вхідного значення, незалежно від його розміру. Опублікований у 1992 році Рональдом Рівестом у вигляді RFC 1321, MD5 розроблявся як швидший наступник MD4 і швидко став однією з найпоширеніших хеш-функцій в Інтернеті. Алгоритм обробляє вхідні дані блоками по 512 біт через чотири раунди по 16 операцій, використовуючи різну нелінійну функцію в кожному раунді, щоб отримати 32-символьний шістнадцятковий відбиток.
Хеш-функція є однобічним перетворенням: за вхідними даними можна миттєво обчислити хеш, але, маючи лише хеш, відновити вихідні дані неможливо. Навіть зміна одного біта у вхідних даних призводить до повністю іншого дайджесту — це властивість називається лавинним ефектом. MD5 відображає нескінченний простір вхідних даних на фіксований 128-бітний вихідний простір, тому колізії (два різних вхідних значення, що дають однаковий хеш) математично гарантовано існують, проте безпечна хеш-функція має робити їх пошук обчислювально неможливим.
Починаючи з 2004 року дослідники продемонстрували практичні атаки на колізії проти MD5, тобто він більше не вважається безпечним для цифрових підписів, сертифікатів та будь-якого контексту, де потрібна стійкість до колізій. Однак MD5 залишається широко використовуваним для завдань, не пов'язаних із безпекою: перевірка цілісності файлів після завантаження, генерація ключів кешу, дедублікація вмісту та створення детерміністичних ідентифікаторів із рядків. Для таких застосувань швидкодія алгоритму та повсюдна підтримка в бібліотеках роблять його практичним вибором. У 2008 році Марк Стівенс та його колеги опублікували атаку на колізію з довільним префіксом, тобто зловмисник може створити два документи з будь-якими обраними префіксами, що матимуть однаковий дайджест. Ця техніка була продемонстрована на Chaos Communication Congress 2008 шляхом створення шахрайського сертифіката Центру сертифікації. Шкідливе ПЗ Flame у 2012 році використало колізії з довільним префіксом, щоб підробити сертифікат підпису коду Microsoft, дозволивши шкідливому ПЗ видавати себе за легітимний пакет оновлень Windows. Ці реальні експлойти підтвердили, що алгоритм криптографічно зламаний для будь-якого застосування, що покладається на довіру, і не повинен використовуватися там, де зловмисник може впливати на дані, що хешуються.
Навіщо використовувати цей генератор MD5?
Генеруйте хеші MD5 миттєво, не встановлюючи нічого і не пишучи коду. Вставте текст і отримайте 32-символьний шістнадцятковий дайджест у реальному часі.
Сфери застосування MD5
MD5 проти інших алгоритмів хешування
MD5 є найшвидшим і найкоротшим із поширених алгоритмів хешування, але забезпечує найслабші гарантії безпеки. Таблиця нижче порівнює розміри дайджестів, стандарти та відповідні сфери застосування для кожного алгоритму.
| Алгоритм | Розмір дайджесту | Довжина hex | Стандарт | Найкраще для |
|---|---|---|---|---|
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums, non-security fingerprints |
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Legacy git commits (being replaced) |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, backup standard |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
Як працює MD5
MD5 обробляє вхідні дані через конструкцію Merkle-Damgard: повідомлення доповнюється до кратного 512 бітам, розбивається на блоки, і кожен блок проходить через чотири раунди по 16 побітових операцій, що змішують вхідні дані з попередньо обчисленими константами, похідними від синуса. Результатом є 128-бітний стан, який стає фінальним дайджестом.
Кожен раунд застосовує окрему нелінійну допоміжну функцію до трьох із чотирьох 32-бітних слів стану (A, B, C, D). Раунд 1 використовує F(B,C,D) = (B AND C) OR (NOT B AND D) — побітовий умовний селектор. Раунд 2 використовує G(B,C,D) = (B AND D) OR (C AND NOT D) — доповнювальний селектор. Раунд 3 використовує H(B,C,D) = B XOR C XOR D — функцію парності. Раунд 4 використовує I(B,C,D) = C XOR (B OR NOT D) — асиметричний комбайнер. Ці чотири функції забезпечують вплив кожного біта вхідних даних на вихідний дайджест, породжуючи лавинний ефект, що змушує невеликі зміни вхідних даних спричиняти великі, непередбачувані зміни результуючого хешу.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
Алгоритм виконується у п'ять етапів: (1) додається біт 1, потім нулі, доки довжина повідомлення не стане 448 mod 512; (2) додається початкова довжина повідомлення як 64-бітне ціле число у форматі little-endian; (3) ініціалізуються чотири 32-бітні змінні стану (A, B, C, D) із фіксованими константами; (4) кожен 512-бітний блок обробляється через 64 операції з використанням чотирьох нелінійних функцій (F, G, H, I), по одній на раунд із 16 операцій; (5) отриманий стан додається до поточного підсумку, і виводиться фінальний 128-бітний хеш у форматі little-endian.
Приклади коду
Як генерувати хеші MD5 у популярних мовах і середовищах. Зверніть увагу, що MD5 недоступний у браузерному Web Crypto API — використовуйте бібліотеку або Node.js.
// MD5 is not available in Web Crypto API (it only supports SHA-*)
// Use a library like 'js-md5' or the Node.js crypto module
// Node.js (built-in crypto)
const crypto = require('crypto')
const hash = crypto.createHash('md5').update('hello world').digest('hex')
console.log(hash) // → "5eb63bbbe01eeed093cb22bb8f5acdc3"
// With Unicode input
crypto.createHash('md5').update('cafe\u0301').digest('hex')
// → "4fad076bae205e95bec9dacea498e2ab"import hashlib
# Basic MD5 hash
result = hashlib.md5(b'hello world').hexdigest()
print(result) # → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a string (must encode to bytes first)
text = 'hello world'
hashlib.md5(text.encode('utf-8')).hexdigest()
# → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a file
with open('file.bin', 'rb') as f:
md5 = hashlib.md5()
for chunk in iter(lambda: f.read(8192), b''):
md5.update(chunk)
print(md5.hexdigest())package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := []byte("hello world")
hash := md5.Sum(data)
fmt.Printf("%x\n", hash)
// → 5eb63bbbe01eeed093cb22bb8f5acdc3
}# Using md5sum (Linux) or md5 (macOS) echo -n "hello world" | md5sum # → 5eb63bbbe01eeed093cb22bb8f5acdc3 - # macOS echo -n "hello world" | md5 # → 5eb63bbbe01eeed093cb22bb8f5acdc3 # Hash a file md5sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl md5 # → MD5(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3