PHP crypt() Fungsi
Referensi String PHP
Definisi dan Penggunaan
Fungsi crypt() mengembalikan string hash menggunakan algoritma DES, Blowfish, atau MD5.
Fungsi ini berperilaku berbeda pada sistem operasi yang berbeda. PHP memeriksa algoritma apa yang tersedia dan algoritma apa yang digunakan ketika diinstal.
Parameter garam adalah opsional. Namun, crypt() membuat kata sandi yang lemah tanpa garam. Pastikan untuk menentukan garam yang cukup kuat untuk keamanan yang lebih baik.
Ada beberapa konstanta yang digunakan bersama dengan fungsi crypt(). Nilai konstanta ini ditetapkan oleh PHP saat diinstal.
Konstanta:
- [CRYPT_STD_DES] - Standar hash berbasis DES dengan dua karakter garam dari alfabet "./0-9A-Za-z". Menggunakan karakter yang tidak valid dalam garam akan menyebabkan fungsi ini gagal.
- [CRYPT_EXT_DES] - Hash berbasis DES yang diperluas dengan garam sembilan karakter yang terdiri dari garis bawah diikuti oleh 4 byte jumlah iterasi dan 4 byte garam. Ini dikodekan sebagai karakter yang dapat dicetak, 6 bit per karakter, karakter paling tidak signifikan terlebih dahulu. Nilai 0 hingga 63 dikodekan sebagai "./0-9A-Za-z". Menggunakan karakter yang tidak valid dalam garam akan menyebabkan fungsi gagal.
- [CRYPT_MD5] - MD5 hashing dengan garam 12 karakter dimulai dengan $1$
- [CRYPT_BLOWFISH] - Hashing Blowfish dengan garam dimulai dengan $2a$, $2x$, atau $2y$, parameter biaya dua digit "$", dan 22 karakter dari alfabet "./0-9A-Za-z" . Menggunakan karakter di luar alfabet akan menyebabkan fungsi ini mengembalikan string panjang nol. Parameter "$" adalah logaritma basis-2 dari jumlah iterasi untuk algoritme hashing Blowfish-bashed yang mendasarinya dan harus dalam kisaran 04-31. Nilai di luar rentang ini akan menyebabkan fungsi gagal.
- [CRYPT_SHA_256] - SHA-256 hash dengan garam 16 karakter dimulai dengan $5$. Jika string garam dimulai dengan "rounds=<N>$", nilai numerik N digunakan untuk menunjukkan berapa kali loop hashing harus dijalankan, seperti parameter biaya pada Blowfish. Jumlah putaran default adalah 5000, ada minimum 1000 dan maksimum 999.999.999. Setiap pilihan N di luar rentang ini akan dipotong ke batas terdekat.
- [CRYPT_SHA_512] - hash SHA-512 dengan garam 16 karakter dimulai dengan $6. Jika string garam dimulai dengan "rounds=<N>$", nilai numerik N digunakan untuk menunjukkan berapa kali loop hashing harus dijalankan, seperti parameter biaya pada Blowfish. Jumlah putaran default adalah 5000, ada minimum 1000 dan maksimum 999.999.999. Setiap pilihan N di luar rentang ini akan dipotong ke batas terdekat.
Pada sistem di mana fungsi ini mendukung beberapa algoritme, konstanta di atas disetel ke "1" jika didukung dan "0" jika tidak.
Catatan: Tidak ada fungsi dekripsi. Fungsi crypt() menggunakan algoritma satu arah.
Sintaksis
crypt(str,salt)
Nilai Parameter
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Detail Teknis
Nilai Kembali: | Mengembalikan string yang disandikan atau string yang lebih pendek dari 13 karakter dan dijamin berbeda dari garam saat gagal |
---|---|
Versi PHP: | 4+ |
Catatan perubahan: | PHP 5.6.0 - Menampilkan peringatan keamanan E_NOTICE jika garam dihilangkan. PHP 5.3.7 - Menambahkan mode Blowfish $2x$ dan $2y$. PHP 5.3.2 - Menambahkan SHA-256 dan SHA-512. Memperbaiki perilaku Blowfish pada putaran yang tidak valid mengembalikan string "kegagalan" ("*0" atau "*1"), alih-alih kembali ke DES. PHP 5.3.0 - PHP sekarang berisi implementasinya sendiri untuk MD5 crypt, Standard DES, Extended DES dan algoritma Blowfish dan akan menggunakannya jika sistem kekurangan dukungan untuk satu atau lebih algoritma. |
Lebih Banyak Contoh
Contoh
Dalam contoh ini kita akan menguji algoritma yang berbeda:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
Output dari kode di atas bisa (tergantung pada sistem operasi):
Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.
Referensi String PHP