Fungsi crypt() PHP

Definisi dan penggunaan

Fungsi crypt() mengembalikan string yang dienkripsi menggunakan algoritma DES, Blowfish, atau MD5.

Perilaku fungsi ini berbeda di berbagai sistem operasi, beberapa sistem operasi mendukung lebih dari satu jenis algoritma. Saat pemasangan, PHP akan memeriksa algoritma yang tersedia dan yang akan digunakan.

Algoritma yang spesifik bergantung pada format dan panjang parameter salt. Salt dapat membuat pengenkripsi lebih aman dengan menambah jumlah string yang dihasilkan oleh metode pengenkripsi tertentu.

Di sini ada beberapa konstanta yang digunakan bersamaan dengan fungsi crypt(). Nilai konstanta ini disetkan oleh PHP saat pemasangan.

Konstanta:

[CRYPT_SALT_LENGTH] Panjang pengenkripsi yang default. Menggunakan pengenkripsi DES standar, panjangnya 2.
[CRYPT_STD_DES] Hash yang berdasarkan algoritma DES standar menggunakan 2 karakter dari karakter "/./0-9A-Za-z" sebagai salt. Penggunaan karakter yang ilegal dalam salt akan menyebabkan kegagalan crypt().
[CRYPT_EXT_DES] Hash berdasarkan algoritma DES yang diperluas. Salt adalah string 9 karakter, terdiri dari 1 garis bawah diikuti oleh 4 byte iterasi dan 4 byte salt. Mereka dienkodifikasikan dalam karakter yang dapat dicetak, setiap karakter 6 bit, prioritas terendah untuk bit yang berlaku. 0 hingga 63 dienkodifikasikan sebagai "/./0-9A-Za-z". Penggunaan karakter yang ilegal dalam salt akan menyebabkan kegagalan crypt().
[CRYPT_MD5] Penghujan MD5 menggunakan salt string yang dimulai dengan $1$ yang panjang 12 aksara.
[CRYPT_BLOWFISH] Algoritma Blowfish menggunakan salt seperti berikut: "$2a$", parameter cost 2 digit, "$" dan string 64 bit yang di gabungkan dari karakter dalam "./0-9A-Za-z". Penggunaan karakter di luar rentang ini dalam salt akan mengakibatkan crypt() mengembalikan string kosong. Parameter cost 2 digit adalah logaritma pangkat 2 dari kali pengulangan, rentangnya adalah 04-31. Jika di luar rentang ini, crypt() akan gagal.
CRYPT_SHA256 Algoritma SHA-256 menggunakan salt string yang dimulai dengan $5$ yang panjang 16 aksara untuk penghujan. Jika string salt dimulai dengan "rounds=<N>$", nilai numerik N akan digunakan untuk menentukan kali pengulangan penghujan, yang hampir sama seperti parameter cost algoritma Blowfish. Jumlah pengulangan lalai adalah 5000, minimum 1000, maksimum 999,999,999. Nilai N yang di luar rentang ini akan diubah ke nilai terdekat.
CRYPT_SHA512 Algoritma SHA-512 menggunakan salt string yang dimulai dengan $6$ yang panjang 16 aksara untuk penghujan. Jika string salt dimulai dengan "rounds=<N>$", nilai numerik N akan digunakan untuk menentukan kali pengulangan penghujan, yang hampir sama seperti parameter cost algoritma Blowfish. Jumlah pengulangan lalai adalah 5000, minimum 1000, maksimum 999,999,999. Nilai N yang di luar rentang ini akan diubah ke nilai terdekat.

Pada sistem yang mendukung berbagai algoritma yang mendukung konstanta di atas, jika diatur ke "1", jika tidak, diatur ke "0".

Komen:Tiada fungsi dekripsi yang sepadan. Fungsi crypt() menggunakan algoritma satu arah.

Sintaks

crypt(str,salt)
Parameter Deskripsi
str Wajib. Tentukan string yang akan dienkripsi.
salt Pilihan. Digunakan untuk menambah jumlah aksara yang dienkripsi untuk membuat pengenkripsi lebih selamat. Jika parameter salt tidak disediakan, PHP akan menghasilkan salt secara acak setiap kali fungsi ini dipanggil.

Butiran Teknik

Kembalian: Kembalikan string yang dienkripsi atau string kurang daripada 13 aksara, untuk memastikan dapat dibedakan daripada salt dalam keadaan kegagalan.
Versi PHP: 4+

Log Kemas Kini

Versi Pengeluhuran
5.3.2 Dibuat berdasarkan implementasi Ulrich Drepper, menambahkan crypt berdasarkan algoritma SHA-256 dan SHA-512.
5.3.2 Perbaikan untuk masalah algoritma Blowfish yang disebabkan oleh putar yang ilegal, mengembalikan string "gagal" ("*0" atau "*1") daripada menggunakan algoritma DES.
5.3.0 PHP sekarang termasuk implementasi MD5 Crypt sendiri, termasuk algoritma DES standar, DES ekstensi, serta algoritma Blowfish. Jika sistem kurang dari implementasi yang relevan, PHP akan menggunakan implementasi sendiri.

实例

Contoh 1

Di dalam contoh ini, kami akan menguji algoritma yang berbeda:

<?php
// 两字符 salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 字符 salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
//以 $1$ 开始的 12 字符
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// 以 $2a$ 开始的 Salt。双数字的 cost 参数:09. 22 字符
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// Salt 16 huruf yang bermula dengan $5$. Bilangan lalai adalah 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 not supported.\n<br>";
}
// Salt 16 huruf yang bermula dengan $5$. Bilangan lalai adalah 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>

Output kod di atas (berdasarkan 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.