SHA-1 Hash Oluşturucu
Herhangi bir metinden SHA-1 hash oluştur
Giriş Metni
SHA-1 Hash
SHA-1 hash burada görüntülenecek…
SHA-1 Hashing Nedir?
SHA-1 (Secure Hash Algorithm 1), herhangi bir girdiden sabit 160 bit (20 bayt) özet üreten bir kriptografik hash fonksiyonudur. NSA tarafından yayımlanan ve NIST tarafından 1995 yılında FIPS PUB 180-1 olarak standartlaştırılan, daha sonra RFC 3174 ile belgelenen SHA-1; SHA-0 ve MD5'in daha güçlü bir halefi olarak tasarlanmıştır. Algoritma, girdiyi 512 bitlik bloklarda 80 tur bitsel işlemden geçirerek on yılı aşkın süre boyunca SSL/TLS, PGP, SSH ve IPsec'in temelini oluşturan 40 karakterlik onaltılık bir parmak izi üretir.
Tüm kriptografik hash fonksiyonları gibi SHA-1 de tek yönlü bir dönüşümdür: girdiden hash hesaplamak hızlıdır, ancak yalnızca hash'ten özgün girdiyi kurtarmak hesaplama açısından olanaksızdır. Girdideki tek bitlik bir değişiklik bile tamamen farklı bir 160 bitlik özet üretir; bu özellik çığ etkisi olarak adlandırılır. SHA-1, rastgele büyük bir girdi uzayını sabit 160 bitlik bir çıktıya eşler; bu nedenle çakışmaların (iki farklı girdinin aynı hash'i üretmesi) matematiksel olarak var olması zorunludur. Bir hash fonksiyonunun güvenlik iddiası, bu tür çakışmaların bulunmasının yaklaşık 2^80 işlem gerektirmesi gerektiğidir — çıktı bit uzunluğunun yarısı.
2017 yılında Google ve CWI Amsterdam, aynı özete sahip iki farklı PDF dosyası üreterek ilk pratik SHA-1 çakışmasını gösteren SHAttered saldırısını yayımladı. Saldırı yaklaşık 2^63.1 SHA-1 hesabı gerektirdi — teorik 2^80 sınırının çok altında. 2020'de Gaetan Leurent ve Thomas Peyrin, yaklaşık 2^63.4 işlem gerektiren seçilmiş ön ek çakışma saldırısıyla maliyeti daha da düşürdü. Sonuç olarak tüm büyük tarayıcılar, sertifika otoriteleri ve standart kuruluşları SHA-1'i dijital imzalar ve TLS sertifikaları için kullanımdan kaldırdı. Ancak SHA-1, güvenlik dışı amaçlar için hâlâ aktif kullanımdadır: Git nesne kimlikleri (Git SHA-256'ya geçiş yaparken), eski HMAC yapılandırmaları ve düşman çakışma direncinin gerekli olmadığı dosya bütünlüğü sağlama toplamları.
Bu SHA-1 Oluşturucuyu Neden Kullanmalısınız?
Herhangi bir şey yüklemeden veya kod yazmadan SHA-1 hash'lerini anında oluşturun. Metninizi yapıştırın ve 40 karakterlik onaltılık özeti gerçek zamanlı alın — eski sağlama toplamlarını doğrulamak, Git iç işlemlerini hata ayıklamak veya hash tabanlı iş akışlarını test etmek için kullanışlıdır.
SHA-1 Kullanım Alanları
SHA-1 ile Diğer Hash Algoritmalarının Karşılaştırması
SHA-1, 160 bitlik özet üretir — MD5'ten (128 bit) uzun ama SHA-2 ailesi algoritmalarından önemli ölçüde kısa. 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 |
|---|---|---|---|---|
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Deprecated — legacy git commits, old TLS |
| 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 |
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums only — broken since 2004 |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, alternative to SHA-2 |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
SHA-1 Nasıl Çalışır?
SHA-1, Merkle-Damgård yapısını izler: ileti doldurulur, 512 bitlik bloklara bölünür ve her blok, girdiyi bloktan türetilen bir ileti zamanlamasıyla karıştıran 80 tur bitsel işlemden geçirilir. Beş 32 bitlik durum sözcüğü (H0'dan H4'e) sürekli hash durumunu taşır ve bu sözcüklerin son birleşimi 160 bitlik özeti üretir.
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
| Adım | Açıklama |
|---|---|
| Padding | Append a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Expansion | Expand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule. |
| Compression | Process 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79. |
| Output | Concatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters. |
SHA-1 ile MD5 arasındaki temel fark, durum sözcükleri sayısı (5'e karşı 4), blok başına tur sayısı (80'e karşı 64) ve sola döndürme geri beslemeli ileti zamanlamasının kullanımıdır. Bu farklar SHA-1'e daha büyük bir çıktı (160'a karşı 128 bit) ve başlangıçta daha yüksek bir güvenlik payı sağlar; ancak her iki algoritma da artık çakışma direnci açısından kırık kabul edilmektedir.
Kod Örnekleri
Popüler diller ve ortamlarda SHA-1 hash oluşturma. MD5'in aksine SHA-1, tarayıcı Web Crypto API'sinde mevcuttur; bu sayede hem tarayıcı hem de Node.js ortamlarında harici kütüphanelere gerek kalmadan kullanılabilir.
// SHA-1 is available in the Web Crypto API
async function sha1(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-1', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha1('hello world')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha1').update('hello world').digest('hex')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"import hashlib
# Basic SHA-1 hash
result = hashlib.sha1(b'hello world').hexdigest()
print(result) # → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a string (encode to bytes first)
text = 'hello world'
hashlib.sha1(text.encode('utf-8')).hexdigest()
# → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a file in chunks
with open('file.bin', 'rb') as f:
sha1 = hashlib.sha1()
for chunk in iter(lambda: f.read(8192), b''):
sha1.update(chunk)
print(sha1.hexdigest())package main
import (
"crypto/sha1"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha1.Sum(data)
fmt.Printf("%x\n", hash)
// → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}# Using sha1sum (Linux) or shasum (macOS) echo -n "hello world" | sha1sum # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # macOS echo -n "hello world" | shasum -a 1 # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # Hash a file sha1sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl sha1 # → SHA1(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed