SHA-1 Hash Generator
Hasilkan hash SHA-1 dari teks apa pun
Teks Input
Hash SHA-1
Hash SHA-1 akan muncul di sini…
Apa itu Hashing SHA-1?
SHA-1 (Secure Hash Algorithm 1) adalah fungsi hash kriptografis yang menghasilkan digest tetap 160-bit (20-byte) dari input apa pun. Diterbitkan oleh NSA dan distandarisasi oleh NIST pada tahun 1995 sebagai FIPS PUB 180-1, lalu didokumentasikan dalam RFC 3174, SHA-1 dirancang sebagai penerus yang lebih kuat dari SHA-0 dan MD5. Algoritma ini memproses input dalam blok 512-bit melalui 80 putaran operasi bitwise, menghasilkan sidik jari heksadesimal 40 karakter yang menjadi tulang punggung SSL/TLS, PGP, SSH, dan IPsec selama lebih dari satu dekade.
Seperti semua fungsi hash kriptografis, SHA-1 adalah transformasi satu arah: menghitung hash dari input berjalan cepat, tetapi memulihkan input dari hash saja tidak layak secara komputasi. Perubahan satu bit pada input menghasilkan digest 160-bit yang sama sekali berbeda — properti yang disebut efek avalanche. SHA-1 memetakan ruang input yang berukuran sembarang ke output 160-bit tetap, yang berarti tabrakan (dua input berbeda yang menghasilkan hash yang sama) harus ada secara matematis. Klaim keamanan sebuah fungsi hash adalah bahwa menemukan tabrakan tersebut seharusnya memerlukan sekitar 2^80 operasi — setengah dari panjang bit output.
Pada tahun 2017, Google dan CWI Amsterdam mempublikasikan serangan SHAttered, membuktikan tabrakan SHA-1 pertama yang praktis dengan menghasilkan dua file PDF berbeda dengan digest yang sama. Serangan itu membutuhkan sekitar 2^63.1 komputasi SHA-1 — jauh di bawah batas teoritis 2^80. Pada tahun 2020, Gaetan Leurent dan Thomas Peyrin lebih jauh mengurangi biayanya dengan serangan tabrakan chosen-prefix yang membutuhkan sekitar 2^63.4 operasi. Akibatnya, semua browser utama, otoritas sertifikat, dan badan standar telah menghentikan penggunaan SHA-1 untuk tanda tangan digital dan sertifikat TLS. Namun, SHA-1 tetap aktif digunakan untuk keperluan non-keamanan: ID objek Git (meski Git sedang bermigrasi ke SHA-256), konstruksi HMAC lama, dan checksum integritas file di mana resistansi tabrakan terhadap penyerang tidak diperlukan.
Mengapa Menggunakan Generator SHA-1 Ini?
Hasilkan hash SHA-1 secara instan tanpa menginstal apapun atau menulis kode. Tempel teks Anda dan dapatkan digest hex 40 karakter secara real time — berguna untuk memverifikasi checksum lama, men-debug internal Git, atau menguji alur kerja berbasis hash.
Kasus Penggunaan SHA-1
SHA-1 vs Algoritma Hash Lainnya
SHA-1 menghasilkan digest 160-bit — lebih panjang dari MD5 (128 bit) tetapi jauh lebih pendek dari algoritma keluarga SHA-2. Tabel di bawah membandingkan ukuran digest, standar, dan kasus penggunaan yang tepat untuk setiap algoritma.
| Algoritma | Ukuran Digest | Panjang Hex | Standar | Terbaik untuk |
|---|---|---|---|---|
| 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 |
Cara Kerja SHA-1
SHA-1 mengikuti konstruksi Merkle-Damgard: pesan dipadding, dibagi menjadi blok 512-bit, dan setiap blok diproses melalui 80 putaran operasi bitwise yang mencampur input dengan jadwal pesan yang diturunkan dari blok. Lima kata status 32-bit (H0 hingga H4) membawa status hash yang sedang berjalan, dan penggabungan akhir kata-kata ini menghasilkan digest 160-bit.
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
| Langkah | Deskripsi |
|---|---|
| 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. |
Perbedaan utama antara SHA-1 dan MD5 adalah jumlah kata status (5 vs. 4), jumlah putaran per blok (80 vs. 64), dan penggunaan jadwal pesan dengan umpan balik left-rotate. Perbedaan ini memberi SHA-1 output yang lebih besar (160 vs. 128 bit) dan awalnya memberikan margin keamanan yang lebih tinggi, meskipun kedua algoritma kini dianggap rusak untuk resistansi tabrakan.
Contoh Kode
Cara menghasilkan hash SHA-1 dalam bahasa dan lingkungan yang populer. Berbeda dengan MD5, SHA-1 tersedia di Web Crypto API browser, sehingga dapat digunakan tanpa library eksternal di lingkungan browser maupun Node.js.
// 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