Fungsi password_hash() digunakan untuk membuat hash kata sandi.
Persyaratan versi PHP: PHP 5 >= 5.5.0, PHP 7
string kata sandi_hash ( string $kata sandi, int $algo [, array $pilihan ] )
password_hash() membuat hash kata sandi menggunakan algoritma hashing satu arah yang cukup kuat. password_hash() kompatibel dengan crypt(). Jadi, hash kata sandi yang dibuat oleh crypt() juga dapat digunakan dengan password_hash().
Algoritme yang didukung saat ini:
PASSWORD_DEFAULT
- Gunakan algoritma bcrypt (default di PHP 5.5.0). Perhatikan bahwa konstanta ini akan berubah seiring PHP menambahkan algoritma yang lebih baru dan lebih kuat. Oleh karena itu, lamanya hasil yang dihasilkan menggunakan konstanta ini akan berubah di masa mendatang. Oleh karena itu, kolom dalam database tempat hasil disimpan dapat melebihi 60 karakter (sebaiknya 255 karakter).
PASSWORD_BCRYPT
- Membuat hash menggunakan algoritma CRYPT_BLOWFISH
. Ini menghasilkan crypt() yang kompatibel dengan "$2y$". Hasilnya akan berupa string 60 karakter, atau FALSE
jika gagal.
PASSWORD_ARGON2I
- Membuat hash menggunakan algoritma hashing Argon2.
Opsi yang didukung oleh PASSWORD_BCRYPT:
garam(string) - Berikan nilai garam secara manual untuk hashing kata sandi. Ini akan menghindari pembentukan garam otomatis.
Ketika nilai ini dihilangkan, password_hash() secara otomatis menghasilkan nilai garam acak untuk setiap hash kata sandi. Mode operasi ini disengaja.
Catatan: Opsi garam tidak digunakan lagi mulai PHP 7.0.0. Untuk saat ini lebih baik menggunakan garam yang dihasilkan secara default.
cost (integer) - Mewakili biaya yang digunakan oleh algoritma. Ada contoh nilai biaya di halaman crypt().
Jika dihilangkan, nilai defaultnya adalah 10. Biaya ini merupakan keuntungan yang bagus, namun Anda mungkin dapat meningkatkan nilai ini berdasarkan perangkat keras Anda sendiri.
PASSWORD_ARGON2I opsi yang didukung:
memory_cost ( integer ) - Memori maksimum (unit: byte) saat menghitung hash Argon2. Nilai bawaan: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
.
time_cost ( integer ) – Waktu maksimum yang dihabiskan untuk menghitung hash Argon2. Nilai bawaan: PASSWORD_ARGON2_DEFAULT_TIME_COST
.
thread ( integer ) – Jumlah maksimum thread yang digunakan saat menghitung hash Argon2. Nilai bawaan: PASSWORD_ARGON2_DEFAULT_THREADS
.
Deskripsi parameter:
kata sandi: nilai hash yang dibuat oleh password_hash().
algo: Konstanta algoritme kriptografi yang digunakan untuk menunjukkan algoritme yang digunakan saat melakukan hashing kata sandi.
options: array asosiatif yang berisi opsi. Saat ini ada dua opsi yang didukung: salt, garam (string interferensi) yang ditambahkan saat hashing kata sandi, dan biaya, yang digunakan untuk menentukan jumlah level rekursi algoritme. Contoh kedua nilai ini dapat ditemukan di halaman crypt().
Jika dihilangkan, nilai garam acak dan biaya default akan digunakan.
Mengembalikan kata sandi hash, atau FALSE jika gagal.
Outputnya adalah:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Outputnya adalah:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Contoh pengaturan nilai garam secara manual
<?php /* * * Perhatikan bahwa nilai garam di sini dihasilkan secara acak. * Jangan pernah menggunakan nilai garam yang tetap, atau nilai garam yang tidak dihasilkan secara acak. * * Dalam kebanyakan kasus, Anda dapat membiarkan password_hash menghasilkan secara otomatis menghasilkan nilai garam acak untuk Anda */ $pilihan = [ ' biaya ' => 11 , ' garam ' = > mcrypt_create_iv ( 22 , MCRYPT_DEV_URANDOM ) , ] ; password_hash ( " rasmuslerdorf " , PASSWORD_BCRYPT , $pilihan ) ?> ;Outputnya adalah:
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
Contoh Password_hash() untuk menemukan biaya terbaik
<?php /* * * Contoh ini melakukan tes benchmark di server untuk menguji seberapa tinggi biaya yang dapat ditanggung server * Nilai tertinggi dapat ditetapkan tanpa memperlambat server secara signifikan * 8-10 adalah keuntungan yang baik, di server Jika cukup cepat, semakin tinggi semakin baik. * Target kode berikut adalah ≤ 50 milidetik (milidetik), * cocok untuk sistem menangani login interaktif. */ $timeTarget = 0,05 ; // 50 milidetik (milidetik) $ biaya = 8 ; { $biaya ++; $ mulai = waktu mikro ( benar ) ; password_hash ( " tes " , PASSWORD_BCRYPT , [ " biaya " => $ biaya ] ) $end = waktu mikro ( benar ) ; ketika ( ( $akhir - $mulai ) < $target waktu ) ; " Biaya yang Sesuai Ditemukan: " . $biaya ? >Outputnya adalah:
Ditemukan Biaya yang Sesuai: 10
Contoh menggunakan Argon2:
<?php gema ' Argon2 hash : ' .password_hash ( ' rasmuslerdorf ' , PASSWORD_ARGON2I ) ? >Outputnya adalah:
Hash Argon2: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0