Pembuat hash
Buat hash MD5 dan SHA dari teks apa pun, dan cek sebuah nilai terhadap checksum yang diharapkan.
Apa yang sebenarnya dilakukan sebuah fungsi hash
Sebuah fungsi hash kriptografis mengambil masukan berukuran apa pun dan menghasilkan string bita berpanjang-tetap — sebuah digest, atau "hash". Beri ia satu huruf atau seluruh novel dan MD5 selalu mengembalikan 16 bita, SHA-256 selalu mengembalikan 32. Masukan yang sama selalu menghasilkan digest yang sama, dan mengubah satu bit di mana pun dalam masukan mengubah kira-kira separuh bit keluaran, itulah sebabnya dua berkas yang nyaris identik punya hash yang sama sekali tak berhubungan.
Sifat krusialnya adalah fungsi itu hanya berjalan satu arah. Menghitung hash sebuah berkas itu cepat; memulihkan berkas dari hash-nya bukan sekadar lambat melainkan mustahil pada prinsipnya, karena keluaran berpanjang-tetap tak bisa mengodekan masukan tak terbatas. Sebuah hash adalah sidik jari, bukan salinan terenkripsi — tak ada yang bisa didekripsi.
Untuk apa orang sebenarnya memakai hash
- Memverifikasi unduhan: sebuah proyek menerbitkan SHA-256 dari sebuah rilis, Anda meng-hash berkas yang Anda terima, dan digest yang cocok berarti bitanya tiba utuh.
- Mendeteksi perubahan: sistem kendali versi, cadangan, dan deduplikasi membandingkan hash alih-alih berkas utuh, karena membandingkan 32 bita jauh lebih murah daripada membandingkan gigabita.
- Subresource Integrity: sebuah halaman web memaku hash Base64 dari sebuah skrip yang dimuatnya dari CDN, dan browser menolak menjalankan berkas itu jika ia tak cocok.
- Menyimpan sandi — tetapi dengan fungsi lambat yang dirancang khusus, tak pernah hash polos. Lihat di bawah.
Perhatikan apa yang mereka miliki bersama: hash adalah pengganti ringkas untuk sesuatu yang lebih besar, dipakai untuk menjawab "apakah ini hal sama yang saya harapkan?" tanpa mengirim atau menyimpan hal itu sendiri.
MD5 dan SHA-1 rusak — apa artinya dalam praktik
Sebuah fungsi hash dianggap rusak begitu seseorang bisa membangun sebuah tumbukan: dua masukan berbeda yang menghasilkan digest sama. Tumbukan MD5 sudah bisa dihitung pada perangkat keras biasa sejak 2004, dan pada 2017 serangan SHAttered menghasilkan dua berkas PDF berbeda dengan hash SHA-1 yang identik. Kedua algoritme ditandai dalam alat ini karena alasan itu.
Konsekuensi praktisnya lebih sempit daripada "jangan pernah memakainya". Sebuah tumbukan berarti penyerang yang mengendalikan kedua berkas bisa membuat yang jahat cocok dengan digest yang jinak, jadi MD5 dan SHA-1 tak lagi bisa membuktikan bahwa sebuah berkas tak dirusak oleh seseorang yang bermusuhan. Keduanya masih sangat berguna untuk mendeteksi kerusakan tak disengaja — unduhan terpotong, bit terbalik pada cakram — dan Anda akan terus menemuinya dalam sistem warisan, header ETag, dan manifes paket lama yang tak akan ditulis ulang.
Aturan praktisnya: jika pertanyaannya "apakah ini rusak saat transit?", MD5 tak apa. Jika pertanyaannya "apakah seseorang menggantinya dengan sengaja?", pakai SHA-256 atau lebih baik.
Jangan pernah meng-hash sandi dengan ini
MD5, SHA-1, bahkan SHA-256 dirancang agar cepat, dan kecepatan adalah persis sifat yang salah untuk menyimpan sandi. Sebuah GPU modern menghitung miliaran hash SHA-256 per detik, jadi sebuah basis data curian berisi sandi ter-hash polos bisa diserang pada skala luar biasa — dan karena sandi yang sama selalu menghasilkan digest yang sama, tabel prakomputasi membuatnya lebih murah lagi.
Penyimpanan sandi butuh fungsi yang sengaja lambat, ber-salt, dan keras-memori: Argon2id, scrypt, atau bcrypt. Mereka menambahkan salt acak unik per sandi, sehingga sandi identik tak berbagi digest, dan mereka mahal secara dapat-disetel, sehingga tiap tebakan menelan waktu dan memori nyata dari penyerang. Alat ini untuk checksum dan sidik jari, bukan untuk hashing sandi.
Membaca dan membandingkan digest
Digest yang sama bisa ditulis dengan lebih dari satu cara. Heksadesimal huruf kecil adalah yang dicetak alat baris-perintah standar, dan itulah yang biasanya akan Anda bandingkan:
md5sum file.iso # Linux sha256sum file.iso # Linux shasum -a 256 file.iso # macOS Get-FileHash file.iso -Algorithm SHA256 # PowerShell (prints uppercase) certutil -hashfile file.iso SHA256 # Windows (prints uppercase)
Besar-kecil heksadesimal tak membawa makna — PowerShell dan certutil mencetak huruf besar, alat Unix mencetak huruf kecil, dan keduanya adalah nilai sama. Kotak banding dalam alat ini mengabaikan besar-kecil heksadesimal karena itu. Base64 adalah hal berbeda: ia adalah pengodean yang lebih padat dari bita yang sama, dipakai oleh Subresource Integrity dan berbagai API, dan di sana besar-kecil signifikan, jadi ia dibandingkan persis.
Satu kebiasaan terakhir yang layak dibentuk: jangan pernah menatap dua digest panjang untuk memutuskan apakah keduanya cocok. Mata manusia sangat pandai melihat yang diharapkannya, dan beberapa karakter pertama dan terakhir yang sepakat tak berarti apa pun. Tempel nilai yang diharapkan dan biarkan perbandingannya persis.
Pertanyaan yang sering diajukan
- Apakah teks saya dikirim ke server?
- Tidak. Setiap digest dihitung di browser Anda — keluarga SHA melalui Web Crypto API dan MD5 melalui JavaScript yang berjalan di mesin Anda sendiri. Tidak ada yang Anda ketik meninggalkan perangkat Anda.
- Bisakah sebuah hash dibalik untuk mendapatkan teks asli kembali?
- Tidak. Sebuah hash adalah sidik jari berpanjang-tetap, bukan salinan terenkripsi, dan aslinya tak bisa dipulihkan darinya. Situs yang mengiklankan "dekripsi MD5" mencari hash Anda dalam sebuah tabel berisi masukan umum yang telah dihitung sebelumnya, yang hanya bekerja untuk teks pendek atau dapat diprediksi.
- Mengapa MD5 dan SHA-1 membawa peringatan di sini?
- Karena tumbukan sudah praktis bagi keduanya: dua masukan berbeda bisa dibangun untuk berbagi digest. Itu membuatnya tak cocok untuk membuktikan sebuah berkas tak dirusak dengan sengaja, meski keduanya tetap baik untuk menangkap kerusakan tak disengaja.
- Algoritme mana yang sebaiknya saya pakai?
- SHA-256 adalah default yang masuk akal dan yang diterbitkan kebanyakan proyek hari ini. SHA-512 tak lebih aman secara berarti untuk tujuan ini tetapi lebih cepat pada perangkat keras 64-bit. Pakai MD5 atau SHA-1 hanya ketika sesuatu yang tak Anda kendalikan sudah mensyaratkannya.
- Bisakah saya meng-hash sandi dengan ini?
- Bisa, tetapi Anda sebaiknya tak menyimpan hasilnya. Penyimpanan sandi butuh fungsi lambat dan ber-salt seperti Argon2id, scrypt, atau bcrypt — hash cepat seperti ini adalah persis yang membuat basis data sandi curian mudah dipecahkan.
- Mengapa hash berubah ketika saya menambah spasi atau baris-baru?
- Karena spasi adalah bagian dari masukan. Sebuah baris-baru di ujung adalah alasan tunggal paling umum sebuah hash tak cocok dengan yang Anda harapkan — teks yang disalin dari terminal atau penyunting sering membawanya tanpa Anda bisa melihatnya.
- Apakah ia menangani aksara Ibrani, Arab, dan emoji dengan benar?
- Ya. Teks dikodekan sebagai bita UTF-8 sebelum di-hash, yang menjadi standar yang dipakai setiap alat lain, jadi meng-hash "שלום" atau sebuah emoji di sini memberi digest yang sama dengan md5sum atau sha256sum pada berkas UTF-8 yang berisi karakter yang sama.
- Mengapa ia meng-hash teks tetapi bukan berkas?
- Web Crypto tak punya API digest mengalir, jadi sebuah berkas harus dibaca ke memori seutuhnya sebelum bisa di-hash, dan MD5 yang ditulis tangan akan terasa lambat pada berkas besar. Hashing teks mencakup kasus umum dengan jujur alih-alih menawarkan hashing berkas yang macet di halaman.