MD5 Hash Oluşturucu
Herhangi bir metinden MD5 hash oluştur
Giriş Metni
MD5 Hash
MD5 hash burada görüntülenecek…
MD5 Hashing Nedir?
MD5 (Message-Digest Algorithm 5), boyutundan bağımsız olarak herhangi bir girdiden sabit 128 bit (16 bayt) özet üreten bir kriptografik hash fonksiyonudur. Ronald Rivest tarafından 1992 yılında RFC 1321 olarak yayımlanan MD5, MD4'ün daha hızlı bir halefi olarak tasarlanmış ve kısa sürede internette en yaygın kullanılan hash fonksiyonlarından biri hâline gelmiştir. Algoritma, girdiyi 512 bitlik bloklara böler; her tur için farklı bir doğrusal olmayan fonksiyon kullanarak dört turda toplam 64 işlem uygular ve 32 karakterlik onaltılık bir parmak izi üretir.
Hash fonksiyonu tek yönlü bir dönüşümdür: girdi verildiğinde hash anında hesaplanabilir, ancak yalnızca hash verildiğinde özgün girdi kurtarılamaz. Girdideki tek bitlik bir değişiklik bile tamamen farklı bir özet üretir — bu özellik çığ etkisi olarak adlandırılır. MD5, sonsuz bir girdi uzayını sabit 128 bitlik bir çıktı uzayına eşler; bu nedenle çakışmaların (iki farklı girdinin aynı hash'i üretmesi) matematiksel olarak var olması zorunludur, ancak güvenli bir hash fonksiyonu bunları bulmayı hesaplama açısından olanaksız kılar.
2004'ten itibaren araştırmacılar MD5'e karşı pratik çakışma saldırıları göstermiş; bu nedenle algoritma artık dijital imzalar, sertifikalar veya çakışma direncinin gerekli olduğu herhangi bir bağlam için güvenli kabul edilmemektedir. Ancak MD5, güvenlik dışı amaçlar için hâlâ yaygın biçimde kullanılmaktadır: indirme sonrası dosya bütünlüğü doğrulama, önbellek anahtarı oluşturma, içerik tekilleştirme ve dizelerden belirleyici tanımlayıcılar oluşturma. Bu uygulamalar için algoritmanın hızı ve yaygın kütüphane desteği onu pratik bir tercih yapar. 2008 yılında Marc Stevens ve meslektaşları, saldırganın isteğe bağlı seçilmiş ön eklerle aynı özeti paylaşan iki belge oluşturabildiği seçilmiş ön ek çakışma saldırısını yayımladı. Bu teknik, 2008 Chaos Communication Congress'te sahte bir Sertifika Otoritesi sertifikası oluşturularak gösterildi. 2012'de Flame kötü amaçlı yazılımı, bir Microsoft kod imzalama sertifikasını taklit etmek ve kötü amaçlı yazılımın meşru bir Windows Update paketi gibi görünmesini sağlamak için seçilmiş ön ek çakışmalarından yararlandı. Bu gerçek dünya saldırıları, algoritmanın girdileri etkileyen bir düşmanın bulunduğu her güven odaklı kullanım için kriptografik olarak kırık olduğunu ve bu tür durumlarda kullanılmaması gerektiğini teyit etti.
Bu MD5 Oluşturucuyu Neden Kullanmalısınız?
Herhangi bir şey yüklemeden veya kod yazmadan MD5 hash'lerini anında oluşturun. Metninizi yapıştırın, 32 karakterlik onaltılık özet gerçek zamanlı olarak görüntülensin.
MD5 Kullanım Alanları
MD5 ile Diğer Hash Algoritmalarının Karşılaştırması
MD5, yaygın hash algoritmaları arasında en hızlı ve en kısa olanıdır, ancak en zayıf güvenlik garantilerini sunar. Aşağıdaki tablo her algoritma için özet boyutlarını, standartları ve uygun kullanım alanlarını karşılaştırmaktadır.
| Algoritma | Özet Boyutu | Onaltılık Uzunluk | Standart | En İyi Kullanım |
|---|---|---|---|---|
| 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 Nasıl Çalışır?
MD5, girdiyi Merkle-Damgård yapısı aracılığıyla işler: ileti 512 bitin katlarına tamamlanır, bloklara bölünür ve her blok, girdiyi önceden hesaplanmış sinüs türevli sabitlerle karıştıran dört turda 16 bitsel işlemden geçirilir. Sonuç, son özet hâline gelen 128 bitlik bir durumdur.
Her tur, dört 32 bitlik durum kelimesinden (A, B, C, D) üçüne ayrı bir doğrusal olmayan yardımcı fonksiyon uygular. 1. tur F(B,C,D) = (B VE C) VEYA (DEĞİL B VE D) — bitsel koşullu seçici. 2. tur G(B,C,D) = (B VE D) VEYA (C VE DEĞİL D) — tamamlayıcı seçici. 3. tur H(B,C,D) = B XOR C XOR D — eşlik fonksiyonu. 4. tur I(B,C,D) = C XOR (B VEYA DEĞİL D) — asimetrik birleştirici. Bu dört fonksiyon, girdinin her bitinin çıktı özetini etkilemesini sağlayarak küçük girdi değişikliklerinin sonuç hash üzerinde büyük ve öngörülemeyen değişikliklere yol açtığı çığ etkisini üretir.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
Algoritma beş aşamada ilerler: (1) 1 biti ekle, ardından ileti uzunluğu 448 mod 512 olana kadar sıfır ekle; (2) özgün ileti uzunluğunu 64 bitlik küçük endian tamsayı olarak ekle; (3) dört 32 bitlik durum değişkenini (A, B, C, D) sabit değerlerle başlat; (4) her 512 bitlik bloğu, her 16 işlemlik turda dört doğrusal olmayan fonksiyon (F, G, H, I) kullanarak 64 işlemden geçir; (5) elde edilen durumu kümülatif toplama ekle ve son 128 bitlik hash'i küçük endian bayt sırasıyla çıktıla.
Kod Örnekleri
Popüler diller ve ortamlarda MD5 hash oluşturma. MD5'in tarayıcı Web Crypto API'sinde mevcut olmadığını not edin — bir kütüphane veya Node.js kullanın.
// 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