Generator & Verifikator Hash Kata Sandi

Hash dan verifikasi kata sandi dengan bcrypt, scrypt, Argon2id, dan PBKDF2 sepenuhnya di browser Anda — hasilkan string format PHC, periksa kata sandi kandidat terhadap hash yang ada, dan periksa parameter yang tersembunyi di dalamnya. Tidak ada yang diunggah.
Hanya untuk kata sandi uji. Kata sandi pengguna sungguhan tidak boleh pernah ditempel ke halaman web mana pun. Alat ini berjalan sepenuhnya di browser Anda — string-nya tidak pernah meninggalkan tab Anda — tetapi pembobolan nyata dimulai dengan satu kali tempel.
biaya bcrypt (2^biaya putaran)
varian bcrypt varian hanya mengubah awalan; hash itu sendiri identik
scrypt N (biaya CPU)
scrypt r / p r =   p = ukuran blok 128·r byte; memori = 128·N·r byte (N=214, r=8 → 16 MiB)
Argon2id m (memori)
Argon2id t / p t =   p = t = jumlah lintasan; p = paralelisme (jalur)
PRF PBKDF2
Iterasi PBKDF2  OWASP 2023: 600.000 untuk HMAC-SHA-256 (1.300.000 untuk SHA-1, 210.000 untuk SHA-384/512)
Panjang keluaran (byte)  keluaran bcrypt tetap 23 byte (31 karakter bcrypt-base64)
AlgoritmaParameterMemoriPanjang keluaranWaktu (browser ini)
bcryptbiaya 124 KiB23 byte-
scryptN=214, r=8, p=116 MiB32 byte-
Argon2idm=19 MiB, t=2, p=119 MiB32 byte-
PBKDF2HMAC-SHA-256, 600.000 iterasi~032 byte-
Lembar contekan parameter (OWASP Password Storage Cheat Sheet, minimum 2023)
AlgoritmaMinimumCatatan
Argon2idm = 19 MiB (19.456 KiB), t = 2, p = 1disarankan; haus memori
scryptN = 214, r = 8, p = 1haus memori (16 MiB pada minimum)
bcryptbiaya = 10hanya faktor kerja; batas kata sandi 72 byte
PBKDF2-HMAC-SHA256600.000 iterasihanya haus iterasi — ramah GPU, pilihan terakhir
Default di halaman ini berada pada atau di atas setiap minimum. Untuk produksi pilih Argon2id terlebih dahulu, scrypt atau bcrypt jika tidak tersedia, dan PBKDF2 hanya untuk alasan kepatuhan FIPS.
Interop PHP — password_hash($pw, PASSWORD_BCRYPT) menghasilkan $2y$10$...: tempel ke Verifikasi bersama kata sandi kandidat dan halaman ini menjawab persis apa yang akan dijawab password_verify(). Keluaran PASSWORD_ARGON2ID ($argon2id$v=19$m=65536,t=4,p=1$...) juga terverifikasi. String PHC dari passlib, django-argon2, dan pembungkus crypto.scrypt juga dapat diurai.
Uji mandiri
Menjalankan ulang mesin halaman terhadap vektor publik: rangkaian uji crypt_blowfish untuk bcrypt, string scrypt dan Argon2id yang dibuat node/OpenSSL, vektor PBKDF2 dari RFC 6070 dan kumpulan SHA-256 publik, ditambah roundtrip hasilkan-lalu-verifikasi di setiap algoritma serta uji negatif (kata sandi salah harus gagal, string yang rusak harus ditolak). Tidak ada yang dikirim ke mana pun.
Hashing kata sandi dijelaskan dari nol
Dalam satu kalimat: hash kata sandi sengaja lambat (dan sebaiknya haus memori) sehingga mencuri basis data tidak memungkinkan penyerang mencoba miliaran tebakan per detik — kebalikan dari tujuan hash cepat seperti SHA-256, yang dibangun untuk kecepatan.
Mengapa tidak langsung SHA-256 kata sandinya?

SHA-256 pada GPU modern berjalan pada miliaran tebakan per detik. Kata sandi 8 karakter memiliki kurang dari 1013 kombinasi — berjam-jam waktu GPU, menit pada rig besar. Fungsi hash kata sandi (KDF) melawan ini dengan parameter biaya: bcrypt mengulang intinya 2biaya kali, PBKDF2 mengiterasi HMAC ratusan ribu kali, scrypt dan Argon2id juga membutuhkan megabyte memori per tebakan sehingga GPU (cepat tetapi miskin memori per inti) kehilangan keunggulannya. Salt — acak, disimpan terbuka di dalam string hash — menghentikan tabel pelangi prakomputasi dan memaksa setiap tebakan dihitung ulang untuk setiap pengguna.

Empat algoritma di halaman ini
AlgoritmaTahunKekerasanFormat tanda tanganHati-hati terhadap
bcrypt1999CPU (2biaya penyiapan kunci)$2b$12$ + salt 22 karakter + hash 31 karakterBatas kata sandi 72 byte (semua di atas 72 diabaikan secara diam-diam); byte NUL mengakhiri kata sandi dalam implementasi C asli
PBKDF22000 (RFC 2898/8018)CPU (iterasi)$pbkdf2-sha256$i=600000$ + salt + hash (gaya passlib)tanpa biaya memori — GPU dan ASIC menyukainya; hanya jumlah iterasi yang dapat disetel
scrypt2009 (RFC 7914)CPU + memori (128·N·r byte)$scrypt$ln=14,r=8,p=1$ + salt + hashN harus pangkat dua; memori bertambah linier dengan r
Argon2id2015 (pemenang PHC, RFC 9106)CPU + memori (m KiB, t lintasan)$argon2id$v=19$m=19456,t=2,p=1$ + salt + hashArgon2i (independen data) vs Argon2d (bergantung data) vs Argon2id (hibrida) — selalu pilih id kecuali Anda tahu alasannya tidak
Ketahanan memori vs ketahanan komputasi

GPU memiliki ribuan inti, tetapi setiap inti hanya memiliki akses ke sedikit memori cepat. KDF yang membutuhkan 19 MiB working set per tebakan membatasi penyerang hanya sebanyak tebakan paralel yang mereka miliki potongan memori 19-MiB — itulah sebabnya Argon2id pada 19 MiB dalam praktiknya bisa lebih kuat dibanding bcrypt biaya 15 meskipun membutuhkan waktu lebih singkat di laptop Anda. PBKDF2 tidak memiliki jawaban untuk ini: satu-satunya pengaturannya adalah jumlah iterasi, dan silikon meningkatkannya secara linier.

Membaca string PHC

Format modular-crypt / PHC bersifat mendeskripsikan diri: pada $argon2id$v=19$m=19456,t=2,p=1$ICEiIyQlJicoKSorLC0uLw$WTGpK4hf... field-nya adalah algoritma, versi, parameter (m = memori dalam KiB, t = jumlah lintasan, p = jalur paralel), salt base64, hash base64. bcrypt mendahului standar dan menggunakan bentuk ringkasnya sendiri: varian $2b$, biaya 12, lalu salt dan hash dalam alfabet base64 khusus bcrypt (./A-Za-z0-9). Verify halaman ini menerima semua ini dan menampilkan field yang diurai — tempel hash apa pun yang Anda temukan dan lihat apa yang dipecahnya.

Kesalahan umum
  • Hash cepat untuk kata sandi. Kolom kata sandi MD5/SHA-1/SHA-256 jatuh ke GPU komoditas pada miliaran tebakan per detik. Gunakan Generator Hash untuk berkas dan data; gunakan algoritma halaman ini untuk kata sandi.
  • Berbagi salt. Satu salt untuk semua pengguna berarti kata sandi yang sama memiliki hash yang sama dan tabel pelangi kembali digunakan. Setiap hash di sini mendapatkan salt acak 16-byte yang baru.
  • Mengabaikan 72 byte bcrypt. "a"*100 dan "a"*72 menghasilkan hash yang identik — bagian ekornya dibuang. Halaman ini memberi peringatan di kotak masukan ketika kata sandi melebihi 72 byte. Argon2 tidak memiliki batas seperti itu.
  • Membandingkan hash dengan == di kode Anda sendiri. Verifikasi harus waktu-konstan; mesin halaman melakukannya secara internal (menghitung ulang dan membandingkan byte yang tersimpan), tetapi jika Anda menyalin pendekatannya, gunakan perbandingan waktu-konstan.
  • Menyetel parameter di mesin pengembangan yang cepat. Targetkan ~250–500 ms hashing pada perangkat keras median pengguna produksi Anda, bukan workstation Anda. Tombol Tolok Ukur menunjukkan apa yang sebenarnya dialami browser ini.
  • Melakukan hashing ulang pada setiap pemeriksaan login. Verifikasi dulu; hanya lakukan hash ulang (misalnya untuk menaikkan biaya) setelah verifikasi berhasil, dan simpan string yang baru. Fungsi PHP password_needs_rehash() ada persis untuk keperluan ini.
FAQ

Mana yang sebaiknya dipilih? Argon2id dengan setidaknya minimum OWASP. Jika runtime tidak menyediakannya: scrypt, lalu bcrypt (biaya sedemikian rupa sehingga hashing memakan waktu ≥250 ms). PBKDF2 hanya jika sertifikasi mewajibkannya.

Mengapa salt acak ditampilkan dalam string keluaran? Salt bukan rahasia — ia disimpan terbuka di dalam string PHC dengan sengaja, sehingga verifikasi hanya membutuhkan string dan kata sandi kandidat. Tugasnya adalah keunikan, bukan kerahasiaan.

Apakah varian penting ($2a$ / $2b$ / $2y$)? Untuk kata sandi ASCII mereka menghasilkan hash yang identik; $2a$ adalah asli 1990-an, $2b$ memperbaiki bug sign-extension langka (2014), $2y$ adalah penanda PHP bahwa perbaikan tersebut ada. Verifikasi menerima ketiganya.

Berapa lama hash seharusnya berjalan? Kira-kira 250–500 ms per login pada perangkat keras server. Di bawah 100 ms dan cracking offline menjadi murah; di atas 1 detik pengguna mengeluh sebelum keamanan membaik.

Bisakah hash yang dibuat di tempat lain diverifikasi? Bisa — tempel dan berikan kata sandi kandidat. Format yang sudah diketahui baik: password_hash PHP (bcrypt $2y$ dan Argon2id), passlib Python, hasher argon2 django, dan format string scrypt yang digunakan alat scrypt Tarsnap.

Apa yang dilakukan tombol "tolok ukur"? Ia meng-hash kata sandi saat ini sekali dengan setiap algoritma pada parameter default halaman dan melaporkan waktu nyata di browser ini — gambaran perbedaan biaya, bukan pengukuran yang ketat.