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 tipe algoritma. Saat pemasangan, PHP akan memeriksa algoritma yang tersedia dan yang digunakan.

Algoritma yang digunakan tergantung format dan panjang parameter salt. Salt dapat membuat pengamanan lebih aman dengan meningkatkan jumlah string yang dihasilkan oleh string yang digunakan untuk pengamanan spesifik.

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

Konstanta:

[CRYPT_SALT_LENGTH] Panjang pengamanan yang default. Menggunakan pengamanan DES standar, panjangnya 2.
[CRYPT_STD_DES] Hash berbasis 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 berbasis algoritma DES yang diperluas. Salt adalah string 9 karakter, terdiri dari 1 garis bawah diikuti dengan 4 byte iterasi dan 4 byte salt. Mereka diencode dalam karakter yang dapat dicetak, setiap karakter 6 bit, karakter yang memiliki bit yang paling sedikit mendominan. 0 sampai 63 diencode menjadi "/./0-9A-Za-z". Penggunaan karakter yang ilegal dalam salt akan menyebabkan kegagalan crypt().
[CRYPT_MD5] Hash MD5 menggunakan salt string berukuran 12 karakter yang dimulai dengan $1$.
[CRYPT_BLOWFISH] Algoritma Blowfish menggunakan salt seperti berikut: "$2a$", parameter cost 2 digit, "$", dan string 64 digit yang dihasilkan dari kombinasi karakter dari "./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 jumlah pengulangan, range adalah 04-31, dan jika di luar rentang ini akan mengakibatkan kegagalan crypt().
CRYPT_SHA256 Algoritma SHA-256 menggunakan salt string berukuran 16 karakter yang dimulai dengan $5$ untuk penghujan. Jika string salt dimulai dengan "rounds=<N>$", nilai numerik N akan digunakan untuk menentukan kali pengulangan penghujan, hal ini hampir seperti parameter cost algoritma Blowfish. Jumlah pengulangan default adalah 5000, minimum adalah 1000, dan maksimum adalah 999,999,999. Nilai N yang di luar rentang ini akan diubah menjadi nilai terdekat.
CRYPT_SHA512 Algoritma SHA-512 menggunakan salt string berukuran 16 karakter yang dimulai dengan $6$ untuk penghujan. Jika string salt dimulai dengan "rounds=<N>$", nilai numerik N akan digunakan untuk menentukan kali pengulangan penghujan, hal ini hampir seperti parameter cost algoritma Blowfish. Jumlah pengulangan default adalah 5000, minimum adalah 1000, dan maksimum adalah 999,999,999. Nilai N yang di luar rentang ini akan diubah menjadi nilai terdekat.

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

Komentar:Tidak ada fungsi dekripsi yang relevan. Fungsi crypt() menggunakan algoritma satu arah.

Sintaks

crypt(str,salt)
Parameter Deskripsi
str Diperlukan. Tentukan string yang akan dienkripsi.
salt Opsional. Digunakan untuk menambah jumlah karakter yang dienkripsi untuk membuat enkripsi lebih aman. Jika parameter salt tidak disediakan, PHP akan menggenerate salt acak setiap kali fungsi ini dipanggil.

Detil Teknis

Nilai Kembalian: Kembalikan string yang dienkripsi atau string kurang dari 13 karakter, untuk membedakannya dengan salt ketika gagal.
Versi PHP: 4+

Update Log

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

Instansi

Contoh 1

Dalam contoh ini, kita akan menguji berbagai algoritma:

<?php
// Salt 2 karakter
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES tidak didukung.\n<br>";
}
// Salt 4 karakter
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES tidak didukung.\n<br>";
}
// Dimulai dengan $1$ 12 karakter
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 tidak didukung.\n<br>";
}
// Salt yang dimulai dengan $2a$. Parameter cost berdua digit: 09. 22 karakter
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES tidak didukung.\n<br>";
}
// Salt yang dimulai dengan $5$ berukuran 16 karakter. Jumlah standar 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 yang dimulai dengan $5$ berukuran 16 karakter. Jumlah standar adalah 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>

Keluaran kode di atas (tergantung 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.