Skip to content

Generator htpasswd — bcrypt, Apache MD5 (apr1) & Basic Auth

Buat entri htpasswd dengan bcrypt, Apache MD5 (apr1), SHA-1 & lainnya. Dapatkan konfigurasi Apache, nginx & Docker siap pakai. 100% di browser Anda — tanpa upload.

Tanpa Pelacakan Berjalan di Browser Gratis
100% di browser Anda — kata sandi tidak pernah meninggalkan perangkat Anda.
Server
cost bcrypt: 12
entri htpasswd
Header Authorization
 
Verifikasi hash yang ada
Ditinjau untuk kebenaran hash dan kepatuhan standar Basic Auth — Go Tools Engineering Team · Jun 4, 2026

Apa Itu File htpasswd?

File .htpasswd menyimpan kredensial yang digunakan oleh HTTP Basic Authentication. Setiap baris adalah pasangan username:hash tunggal, di mana hash adalah digest satu arah dari password — teks asli tidak pernah disimpan. Server web membaca file ini untuk menentukan siapa yang boleh mengakses URL yang dilindungi. Di Apache, file .htaccess (atau blok <Directory>) merujuk ke file .htpasswd dan meminta browser memasukkan username dan password sebelum melayani halaman.

Format hash bergantung pada algoritma yang menghasilkannya. Alat htpasswd Apache dapat menghasilkan beberapa: bcrypt (baris dimulai dengan $2y$) adalah yang terkuat dan direkomendasikan untuk Apache, Docker Registry, dan Caddy; apr1 (Apache MD5, dimulai dengan $apr1$) adalah yang paling portabel dan default aman untuk nginx; SHA-1 (dimulai dengan {SHA}) tidak menggunakan salt dan dianggap tidak aman; crypt (DES tradisional) adalah warisan lama dan memotong pada 8 karakter; dan plain menyimpan password dalam teks biasa, yang tidak boleh pernah digunakan di produksi.

Generator ini berjalan sepenuhnya di browser Anda — tidak ada username, password, atau hash yang pernah diunggah. Jika Anda membutuhkan password yang kuat untuk entri Anda, gunakan Generator Kata Sandi Acak kami. Untuk membuat header Authorization: Basic secara manual, kredensialnya hanyalah base64(user:password), yang dapat Anda hasilkan dengan Encoder Base64 kami. Dan setelah endpoint Anda dilindungi, uji dari command line dengan Pembangun Perintah cURL kami.

# Apache htpasswd CLI equivalents (apache2-utils / httpd-tools)

# bcrypt entry, printed to stdout (recommended; -B = bcrypt, -n = no file, -b = password on CLI)
htpasswd -Bbn admin 's3cret'
# → admin:$2y$10$N9qo8uLOickgx2ZMRZoMye...

# apr1 (Apache MD5) entry, portable for nginx — no apache2-utils needed
printf "admin:$(openssl passwd -apr1 's3cret')\n"
# → admin:$apr1$k3l4Hj9.$qN8...

# Append a user to an existing file from the shell
htpasswd -B /etc/apache2/.htpasswd alice

# Note: nginx delegates bcrypt to the system crypt(); on Alpine/musl or old
# glibc that fails — prefer apr1 for nginx to stay portable.

Fitur Utama

Berbagai Algoritma Hash

Hasilkan entri bcrypt ($2y$), apr1 / Apache MD5 ($apr1$), dan SHA-1 ({SHA}) — ditambah opsi plain (teks biasa) untuk pengujian. Masing-masing menggunakan salt kriptografis yang baru di mana format mendukungnya.

Buat dan Verifikasi

Buat entri baru atau verifikasi yang sudah ada. Tempel baris user:hash yang tersimpan dan kata sandi kandidat untuk langsung mengonfirmasi apakah cocok — berguna untuk men-debug 401 di produksi.

Pilih Berdasarkan Server

Pilih Apache, nginx, Docker, atau Caddy dan algoritma yang tepat dipilih secara otomatis — bcrypt di mana didukung, apr1 untuk portabilitas nginx — sehingga Anda menghindari kegagalan crypt() yang diam-diam.

Blok Konfigurasi Siap Tempel

Dapatkan enam cuplikan konfigurasi siap salin — Apache .htaccess, nginx auth_basic, Docker, Kubernetes ingress-nginx, Caddy, dan Traefik — sudah terhubung ke entri .htpasswd yang dihasilkan.

100% Sisi Klien

Semua proses hash terjadi secara lokal di browser Anda melalui Web Crypto dan implementasi bcrypt bawaan. Tidak ada username, password, atau hash yang pernah dikirim ke server, sehingga Anda dapat menghasilkan kredensial produksi secara privat.

Contoh

Entri bcrypt (direkomendasikan)

admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Entri bcrypt dengan awalan $2y$ dan cost 10. Ini adalah format terkuat dan paling portabel — gunakan untuk Apache, Docker Registry, Caddy, dan Traefik.

Entri apr1 (nginx portabel)

admin:$apr1$kl3H9j2.$qN8vY7tLp2mZ0xW5cR4fK1

Apache MD5 (apr1) dengan salt 8 karakter setelah penanda $apr1$. Default aman untuk nginx, di mana verifikasi bcrypt bergantung pada crypt() sistem yang tidak andal.

Entri SHA-1 (warisan lama)

admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=

Entri {SHA} adalah base64 dari digest SHA-1 tanpa salt. Apache dan nginx menerimanya, tetapi tidak menggunakan salt dan tidak aman — disertakan hanya untuk kompatibilitas warisan.

Header Authorization: Basic

Authorization: Basic YWRtaW46czNjcmV0

Kredensial sisi klien untuk pengguna yang sama: base64('admin:s3cret'). Kirim header ini dengan curl -H atau Postman untuk autentikasi tanpa menulis file .htpasswd.

File .htpasswd multi-pengguna

admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
alice:$2y$10$3bQ8xY7tLp2mZ0xW5cR4fO9vK1jH6sD2nG8aQ5wE3rT7uI4oP1cm
bob:$apr1$mZ0xW5cR$4fK1jH6sD2nG8aQ5wE3rT2

Satu baris username:hash per pengguna. Algoritma dapat dicampur dalam file yang sama — di sini dua entri bcrypt dan satu entri apr1 hidup berdampingan untuk tiga pengguna.

Cara Penggunaan

  1. 1

    Konfigurasi Server & Algoritma

    Pilih server target Anda (Apache, nginx, Docker, Caddy). Algoritma yang tepat dipilih otomatis — bcrypt untuk Apache/Docker/Caddy, apr1 untuk nginx yang portabel — tetapi Anda dapat menggantinya dan menyetel cost bcrypt.

  2. 2

    Buat Hash

    Masukkan username dan password (atau klik Kata sandi acak), lalu klik Buat. Hash dihitung secara lokal dengan salt acak yang baru. Putar ulang salt kapan saja untuk membuat entri baru.

  3. 3

    Salin Entri

    Salin baris user:hash untuk file .htpasswd, salin perintah echo >> untuk shell, atau salin header Authorization: Basic untuk curl dan Postman.

  4. 4

    Deploy Konfigurasi

    Tempel blok konfigurasi yang dihasilkan ke .htaccess Apache, blok server nginx, Docker, ingress Kubernetes, Caddy, atau konfigurasi Traefik Anda, arahkan ke file .htpasswd, dan muat ulang server.

Kasus Penggunaan Umum

Perlindungan Direktori Apache
Kunci folder dengan HTTP Basic Auth menggunakan file .htaccess dan direktif AuthUserFile. Masukkan entri bcrypt dan blok konfigurasi Apache yang dihasilkan untuk memerlukan login di jalur mana pun.
nginx auth_basic
Lindungi blok location atau server dengan auth_basic dan auth_basic_user_file. Gunakan format apr1 agar verifikasi bekerja secara andal di seluruh Alpine, Debian, dan image dasar lainnya.
Docker Registry
Docker Registry pribadi hanya menerima entri htpasswd bcrypt. Buat baris $2y$ dengan htpasswd -Bbn, pasang ke container registry, dan autentikasi docker login Anda.
Kubernetes ingress-nginx
Buat Secret basic-auth dari file .htpasswd Anda dan rujuk dengan anotasi nginx.ingress.kubernetes.io/auth-type dan auth-secret untuk mengamankan rute ingress.
Caddy & Traefik
Direktif basic_auth Caddy dan middleware basicauth Traefik keduanya mengharapkan hash bcrypt. Tempel entri yang dihasilkan langsung ke Caddyfile atau label/konfigurasi dinamis Traefik Anda.
Header Authorization curl & Postman
Lewati file sepenuhnya untuk pengujian cepat: salin header Authorization: Basic untuk mengirim kredensial secara langsung. Masukkan ke flag curl -H atau request Postman untuk mengakses endpoint yang dilindungi.

Detail Teknis

bcrypt ($2y$)
Hash adaptif berbasis salt yang didasarkan pada cipher Blowfish dengan faktor cost yang dapat disetel. Setiap entri menyematkan salt 16-byte acak dan cost, sehingga password yang identik menghasilkan hash yang berbeda. Catatan: bcrypt memotong password pada 72 byte — karakter setelah itu diabaikan.
apr1 (Apache MD5)
Varian MD5 Apache yang diiterasi dan menggunakan salt ($apr1$ + salt 8 karakter). Menjalankan 1.000 putaran MD5, yang jauh lebih lemah dibandingkan cost adaptif bcrypt, tetapi diimplementasikan secara native oleh Apache dan nginx, menjadikannya format paling portabel di berbagai platform dan image dasar.
SHA-1 dan crypt
Entri SHA-1 ({SHA} + digest base64) tidak menggunakan salt, sehingga password yang identik menghasilkan hash yang identik dan rentan terhadap rainbow table — disertakan hanya untuk kompatibilitas warisan. crypt tradisional (DES) bahkan lebih lemah dan secara diam-diam memotong password pada 8 karakter.
Salt & Iterasi
Salting mencegah serangan precomputed (rainbow-table) dengan membuat setiap hash unik. bcrypt menggunakan salt acak 128-bit dengan cost yang dapat dikonfigurasi; apr1 menggunakan salt 8 karakter dengan 1.000 iterasi tetap. Gunakan Putar ulang salt untuk menghasilkan hash yang berbeda namun valid untuk password yang sama.
Penanganan Base64 & UTF-8
Password dikodekan sebagai byte UTF-8 sebelum di-hash, sehingga karakter non-ASCII ditangani secara konsisten. Header Authorization: Basic adalah base64 dari byte UTF-8 mentah username:password, sesuai dengan yang di-decode server di sisi penerima.
Catatan Kejujuran & Batasan
Hash yang dihasilkan dihitung secara lokal dan tidak pernah diverifikasi terhadap server yang berjalan. Entri yang disalin dan file .htpasswd yang diunduh tersimpan di clipboard dan disk Anda dalam bentuk plaintext-hash — perlakukan seperti rahasia, batasi izin file, dan bersihkan clipboard Anda setelah menempelkannya ke konfigurasi produksi.

Praktik Terbaik

Utamakan bcrypt Di Mana Didukung
Gunakan bcrypt ($2y$) untuk Apache, Docker, Caddy, dan Traefik — berbasis salt, adaptif, dan jauh lebih kuat dari apr1 atau SHA-1. Cadangkan apr1 khusus untuk nginx ketika ketergantungan bcrypt pada crypt() sistem membuatnya tidak andal.
Simpan File di Luar Web Root
Jauhkan .htpasswd dari direktori yang disajikan agar tidak pernah dapat diunduh melalui HTTP. Atur chmod 640 dan jadikan milik pengguna server web sehingga server dapat membacanya sementara akun lain tidak bisa.
Selalu Sajikan Melalui HTTPS
Basic Auth mengirimkan kredensial sebagai base64 yang dapat dibalik di setiap request. Tanpa TLS, siapa pun di jalur jaringan dapat membaca password. Jangan pernah mengaktifkan Basic Auth di HTTP biasa — terminasi TLS di depan endpoint yang dilindungi.
Gunakan Password Unik dan Kuat
Setiap akun harus memiliki password entropi tinggi tersendiri, tidak pernah digunakan ulang di berbagai layanan. Buat satu dengan Generator Kata Sandi Acak kami dan simpan di manajer kata sandi daripada membuatnya secara manual.

Pertanyaan yang Sering Diajukan

bcrypt vs apr1 — mana yang harus dipilih?
Gunakan bcrypt untuk Apache, Docker Registry, Caddy, dan Traefik — ini adalah hash adaptif berbasis salt yang kuat dan merupakan standar modern. Gunakan apr1 (Apache MD5) untuk nginx, karena nginx menyerahkan bcrypt ke crypt() sistem dan itu gagal di banyak build, sementara apr1 diimplementasikan secara internal dan berfungsi di mana saja. Jika Anda mengontrol runtime dan tahu bcrypt didukung, bcrypt selalu menjadi pilihan yang lebih kuat; apr1 adalah tentang portabilitas, bukan keamanan.
Apakah nginx mendukung bcrypt?
Hanya secara tidak langsung, dan tidak secara andal. nginx tidak melakukan hash password sendiri — untuk entri $2y$ ia mendelegasikan verifikasi ke fungsi crypt() pustaka C, sehingga dukungannya sepenuhnya bergantung pada libc Anda. musl Alpine dan build glibc lama tidak menyertakan skema blowfish (bcrypt), sehingga autentikasi gagal secara diam-diam. Untuk setup nginx yang portabel, gunakan format apr1 sebagai gantinya, yang diverifikasi nginx secara internal di setiap platform.
Bagaimana cara memperbaiki error nginx `crypt_r() failed (22: Invalid argument)`?
Error tersebut berarti nginx mencoba memverifikasi hash bcrypt ($2y$) pada libc yang tidak mendukung skema blowfish — biasanya Alpine/musl atau glibc lama. Solusinya adalah menghasilkan ulang entri sebagai apr1 (Apache MD5) alih-alih bcrypt, yang diverifikasi nginx secara internal di platform mana pun. Alternatifnya, beralih ke image dasar yang libc-nya menyertakan dukungan bcrypt, tetapi apr1 adalah solusi yang lebih sederhana dan portabel.
Di mana saya harus meletakkan file .htpasswd dan izin apa yang diperlukan?
Simpan file .htpasswd di luar root dokumen web sehingga tidak pernah dapat disajikan sebagai file statis dan terekspos. Lokasi umum adalah /etc/apache2/.htpasswd atau /etc/nginx/.htpasswd. Atur izin ke 640 (chmod 640) dan jadikan milik pengguna yang dijalankan oleh server web (misalnya www-data atau nginx), sehingga server dapat membacanya tetapi akun lain tidak bisa.
Bagaimana cara mengkonfigurasi Basic Auth di .htaccess / nginx?
Untuk Apache, alat ini menghasilkan blok .htaccess dengan AuthType Basic, AuthName, AuthUserFile yang menunjuk ke jalur .htpasswd Anda, dan Require valid-user. Untuk nginx, alat ini menghasilkan blok location dengan auth_basic "Restricted"; dan auth_basic_user_file /path/.htpasswd;. Salin blok konfigurasi yang sesuai dengan server Anda, sesuaikan jalur file, dan muat ulang — cuplikan siap untuk ditempel.
Apakah password saya diunggah ke suatu tempat?
Tidak. Setiap hash dihitung sepenuhnya di browser Anda menggunakan JavaScript — tidak ada username, password, atau hash yang dihasilkan yang pernah dikirim melalui jaringan. Anda dapat mengonfirmasi ini dengan membuka Developer Tools browser Anda (F12 → tab Network) saat membuat: tidak ada request keluar sama sekali. Tidak ada yang disimpan atau dicatat di server mana pun, sehingga aman untuk menghasilkan kredensial produksi nyata di sini.
Apa perbedaan antara $2a$, $2b$, dan $2y$ di bcrypt?
Ketiganya adalah awalan versi untuk algoritma bcrypt yang sama dan menghasilkan hash yang setara; perbedaannya berakar pada perbaikan bug historis dalam cara implementasi tertentu menangani karakter high-bit dan panjang string. htpasswd Apache menghasilkan $2y$. Pustaka bcrypt modern memperlakukan $2a$, $2b$, dan $2y$ sebagai dapat dipertukarkan untuk verifikasi, sehingga entri $2y$ yang dihasilkan di sini akan divalidasi dengan benar di Apache, Caddy, Traefik, dan Docker Registry.
Cost bcrypt berapa yang harus saya gunakan?
Cost 12 adalah default modern dan keseimbangan keamanan dan kecepatan yang baik. Cost adalah faktor kerja: setiap kenaikan menggandakan waktu untuk menghitung dan memverifikasi hash, yang memperlambat serangan brute-force tetapi juga menambah latensi pada setiap login. Cost 10 dapat diterima untuk endpoint lalu lintas rendah atau risiko rendah; 12–14 direkomendasikan untuk hal-hal sensitif. Hindari terlalu tinggi sehingga autentikasi yang sah menjadi terasa lambat.
htpasswd vs header Authorization: Basic — apa bedanya?
Keduanya berada di ujung berlawanan dari pertukaran yang sama. File .htpasswd menyimpan hash sisi server — digest satu arah yang digunakan server untuk memverifikasi kredensial. Header Authorization: Basic adalah kredensial request sisi klien: base64 harfiah dari username:password yang dikirim browser atau curl di setiap request. Server men-decode base64 header tersebut, lalu memeriksa password terhadap hash yang tersimpan. Satu adalah penyimpanan, yang lain adalah transportasi.
Saya tidak memiliki apache2-utils terpasang — bagaimana cara membuat entri htpasswd?
Anda tidak membutuhkannya — alat ini menghasilkan entri bcrypt, apr1, dan SHA-1 yang valid sepenuhnya di browser Anda. Jika Anda lebih suka command line, OpenSSL tersedia di hampir setiap sistem: jalankan openssl passwd -apr1 untuk menghasilkan hash apr1, lalu tambahkan awalan username: untuk membentuk barisnya. Di Debian/Ubuntu Anda juga dapat menginstal biner htpasswd melalui apt install apache2-utils, atau httpd-tools di RHEL/CentOS.
Apa arti flag htpasswd -B, -Bbn, -bnB?
Setiap huruf adalah flag independen: -B memilih bcrypt, -n mencetak hasilnya ke stdout alih-alih menulis ke file, dan -b mengambil password sebagai argumen command line (alih-alih meminta input). Urutannya tidak penting, jadi -Bbn dan -bnB adalah identik. -Bbn adalah kombinasi umum untuk menyalurkan entri bcrypt ke file htpasswd Docker Registry.
Mengapa Docker Registry memerlukan bcrypt?
Backend autentikasi htpasswd Docker Registry hanya menerima entri berformat bcrypt; hash apr1, SHA-1, dan crypt ditolak dan login akan gagal. Buat entri dengan htpasswd -Bbn user password (atau gunakan opsi bcrypt di sini), pasang file ke container registry, dan arahkan REGISTRY_AUTH_HTPASSWD_PATH ke sana. Selalu pasangkan ini dengan TLS, karena kredensial Basic Auth jika tidak akan terbaca saat dalam transit.
Apakah Basic Auth aman?
Hanya melalui HTTPS. HTTP Basic Auth mengirim kredensial sebagai base64(username:password) di setiap request, dan base64 adalah encoding yang dapat dibalik — bukan enkripsi — sehingga siapa pun yang dapat membaca lalu lintas dapat langsung memulihkan password. Melalui TLS, header dienkripsi saat transit dan Basic Auth dapat diterima untuk pengamanan sederhana. Jangan pernah menggunakannya di HTTP biasa, dan pilih skema yang lebih kuat untuk aplikasi bernilai tinggi.