SHA-256 Hash Üreticisi
Herhangi bir metinden SHA-256 hash oluştur
Giriş Metni
SHA-256 Karma
SHA-256 hash burada görüntülenecek…
SHA-256 Hashing Nedir?
SHA-256 (Secure Hash Algorithm 256-bit), NIST tarafından 2001 yılında FIPS 180-2 kapsamında (sonradan FIPS 180-4 ile güncellenerek) yayımlanan SHA-2 ailesine ait bir kriptografik hash fonksiyonudur. Tek bir karakter, birkaç gigabaytlık bir dosya veya boş bir dize gibi herhangi bir giriş verildiğinde SHA-256, geleneksel olarak 64 onaltılık karakter biçiminde gösterilen sabit 256 bit (32 bayt) uzunluğunda bir özet üretir. SHA-256, üretim sistemlerinde bugün en yaygın kullanılan hash fonksiyonudur; TLS sertifika zincirleri, Bitcoin’in iş ispatı mekanizması, Subresource Integrity (SRI) ve kod imzalama süreçlerinin temelini oluşturur.
SHA-256 tek yönlü bir fonksiyondur: girişten hash hesaplamak hızlıdır (modern donanımda saniyede yüzlerce megabayt), ancak bu işlemi tersine çevirmek — belirli bir hash’i üreten girişi bulmak — hesaplama açısından imkânsızdır. Ön-görüntü direnci olarak adlandırılan bu özellik, SHA-256’yı parola hashleme (bir tuz ve anahtar gerdirme ile birlikte kullanıldığında), dijital imzalar ve veri bütünlüğü doğrulama için uygun kılar. MD5 ve SHA-1’in aksine, tam SHA-256’ya karşı herhangi bir çakışma veya ön-görüntü saldırısı henüz gösterilememiştir.
SHA-2 ailesi altı varyant içerir: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 ve SHA-512/256. SHA-256, 32 bitlik sözcükler üzerinde blok başına 64 turla çalışır ve 32 bitlik işlemciler için optimize edilmiştir. SHA-512 ise 64 bitlik sözcükler ve 80 tur kullanır; 64 bitlik platformlarda daha hızlı olabilir. 256 bitlik bir özetin yeterli olduğu çoğu uygulama için SHA-256, NIST, IETF ve CA/Browser Forum tarafından varsayılan öneri olmayı sürdürmektedir.
Neden Çevrimiçi SHA-256 Oluşturucu Kullanılır?
SHA-256 hash üretmek genellikle bir terminal komutu veya birkaç satır kod gerektirir. Bu tarayıcı tabanlı araç, hiçbir şey yüklemeden, bağlam değiştirmeden ya da betik yazmadan SHA-256 özetleri hesaplamanıza olanak tanır.
SHA-256 Kullanım Senaryoları
SHA-2 Ailesi Varyantları Karşılaştırması
SHA-256, FIPS 180-4’te tanımlanan SHA-2 ailesine aittir. Her varyant, özet boyutu, performans özellikleri ve güvenlik payı arasında farklı bir denge kurar. Aşağıdaki tablo, karşılaşmanız olası tüm SHA-2 varyantlarını karşılaştırmaktadır.
| Varyant | Özet Boyutu | Onaltılık Uzunluk | Bayt Boyutu | En Uygun Kullanım |
|---|---|---|---|---|
| SHA-256 | 256 bits | 64 hex chars | 32 bytes | TLS, blockchain, code signing, JWTs, SRI |
| SHA-224 | 224 bits | 56 hex chars | 28 bytes | Truncated SHA-256 — rare, specific compliance |
| SHA-384 | 384 bits | 96 hex chars | 48 bytes | Government / CNSS, higher collision margin |
| SHA-512 | 512 bits | 128 hex chars | 64 bytes | Digital signatures, HMAC with large keys |
| SHA-512/256 | 256 bits | 64 hex chars | 32 bytes | SHA-512 speed on 64-bit CPUs, 256-bit output |
SHA-256 vs. SHA-1 vs. MD5 vs. SHA-3
Doğru hash algoritmasını seçmek, güvenlik gereksinimlerinize ve uyumluluk kısıtlamalarınıza bağlıdır. SHA-256 pratik dengeyi sağlar: güvenlidir, Web Crypto API dahil evrensel destek görür ve çoğu iş yükü için yeterince hızlıdır. Aşağıdaki karşılaştırma tablosu, bir hash fonksiyonu seçerken en çok önem taşıyan özellikleri kapsamaktadır.
| Özellik | SHA-256 | SHA-1 | MD5 | SHA-3-256 |
|---|---|---|---|---|
| Digest size | 256 bits (64 hex) | 160 bits (40 hex) | 128 bits (32 hex) | 256 bits (64 hex) |
| Security status | Secure | Broken (2017) | Broken (2004) | Secure |
| Collision resistance | 2^128 operations | Practical attack | Practical attack | 2^128 operations |
| Block size | 512 bits | 512 bits | 512 bits | 1600 bits (sponge) |
| Rounds | 64 | 80 | 64 | 24 |
| Standard | FIPS 180-4 | FIPS 180-4 | RFC 1321 | FIPS 202 |
| Web Crypto API | Yes | Yes | No | No |
| Primary use today | TLS, blockchain, SRI | Legacy git only | Non-security checksums | Backup standard |
SHA-256 İçeride Nasıl Çalışır?
SHA-256, girişi bir Merkle–Damgård yapısı üzerinden 512 bit (64 bayt) bloklar halinde işler. Algoritma, ilk sekiz asal sayının kareköklerinin kesirli kısımlarından türetilen sekiz adet 32 bitlik durum sözcüğünü (H0–H7) başlangıç değeri olarak ayarlar. Her blok, bit düzeyinde işlemler (AND, XOR, NOT, sağa döndürme, sağa kaydırma) ve ilk 64 asal sayının küp köklerinden türetilen 64 tur sabitini kullanan 64 karıştırma turundan geçer.
SHA-256: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
(256 bits = 32 bytes = 64 hex characters)
| Adım | Açıklama |
|---|---|
| Padding | Append a 1-bit, then zeros until the message length is 448 mod 512. Append the original message length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Message schedule | Expand each 16-word (32-bit) block into 64 words using sigma functions with right-rotate and right-shift operations. |
| Compression | Process 64 rounds per block using Ch, Maj, and two Sigma functions with 64 round constants derived from cube roots of the first 64 primes. |
| Output | Concatenate the eight 32-bit state words (H0-H7) into a 256-bit (32-byte) digest, rendered as 64 hexadecimal characters. |
Çığ etkisi, girişte tek bir bitin çevrilmesinin çıktı bitlerinin yaklaşık %50’sini değiştirmesini sağlar. Bu özellik, 2^128 çakışma direnciyle birleşerek SHA-256’nın 2026’da güvenlik açısından kritik uygulamalar için temel öneri olmayı sürdürmesinin nedenidir.
SHA-256 Kod Örnekleri
SHA-256, her büyük programlama dilinde ve çalışma ortamında yerel olarak kullanılabilir. Web Crypto API, herhangi bir kütüphane gerektirmeksizin tarayıcılarda da sunar. Aşağıdaki örnekler, Unicode giriş işleme ve dosya hashleme dahil gerçek dünya kullanım kalıplarını göstermektedir.
// Works in all modern browsers and Node.js 18+
async function sha256(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-256', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha256('hello world')
// → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha256').update('hello world').digest('hex')
// → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"import hashlib
# Basic SHA-256 hash
result = hashlib.sha256(b'hello world').hexdigest()
print(result) # → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
# Hash a string (encode to bytes first)
text = 'café ☕'
hashlib.sha256(text.encode('utf-8')).hexdigest()
# → "3eb53e00aa1bb4b1e8aab1ab38e56e6b8fb0b20e1cf7e1d19f36e4fad2537445"
# Hash a file in chunks (memory-efficient)
with open('release.tar.gz', 'rb') as f:
sha = hashlib.sha256()
for chunk in iter(lambda: f.read(8192), b''):
sha.update(chunk)
print(sha.hexdigest())package main
import (
"crypto/sha256"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha256.Sum256(data)
fmt.Printf("%x\n", hash)
// → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
}# Using sha256sum (Linux) or shasum (macOS) echo -n "hello world" | sha256sum # → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 - # macOS echo -n "hello world" | shasum -a 256 # → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 - # Verify a file checksum echo "b94d27b... myfile.bin" | sha256sum -c # → myfile.bin: OK # Using openssl (cross-platform) echo -n "hello world" | openssl dgst -sha256 # → SHA2-256(stdin)= b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9