Fungsi crypt() mengembalikan string yang dienkripsi menggunakan algoritma DES, Blowfish, atau MD5.
Fungsi ini berperilaku berbeda pada sistem operasi yang berbeda, dan beberapa sistem operasi mendukung lebih dari satu jenis algoritma. Pada saat instalasi, PHP memeriksa algoritma apa yang tersedia dan algoritma apa yang digunakan.
Algoritme pastinya bergantung pada format dan panjang argumen garam. Salt dapat membuat enkripsi lebih aman dengan meningkatkan jumlah string yang dihasilkan dari string tertentu dengan metode enkripsi tertentu.
Berikut adalah beberapa konstanta yang digunakan dengan fungsi crypt(). Nilai konstanta ini ditentukan oleh PHP selama instalasi.
konstan:
[CRYPT_SALT_LENGTH] - Panjang enkripsi default. Gunakan enkripsi DES standar, panjang 2
[CRYPT_STD_DES] - Enkripsi standar berbasis DES dengan garam 2 karakter dari alfabet "./0-9A-Za-z". Menggunakan karakter yang tidak valid dalam garam akan menyebabkan fungsi gagal.
[CRYPT_EXT_DES] - Enkripsi berbasis DES yang diperluas dengan garam 9 karakter yang terdiri dari garis bawah, diikuti dengan nomor iterasi 4 byte dan garam 4 byte. 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] - Enkripsi MD5 dengan garam 12 karakter dimulai dengan $1$.
[CRYPT_BLOWFISH] - Enkripsi Blowfish memiliki garam yang dimulai dengan $2a$, $2x$ atau $2y$, parameter biaya dua digit "$", dan dari alfabet "./0-9A-Za-z" 22 karakter di dalam . Menggunakan karakter di luar alfabet akan menyebabkan fungsi mengembalikan string dengan panjang nol. Parameter "$" adalah logaritma basis 2 dari jumlah iterasi algoritma hashing Blowfish dan harus berada dalam kisaran 04-31. Nilai di luar rentang ini akan menyebabkan fungsi gagal.
[CRYPT_SHA_256] - Enkripsi SHA-256 memiliki garam 16 karakter, dimulai dengan $5$. Jika string garam dimulai dengan "rounds=<N>$", nilai numerik N digunakan untuk mewakili berapa kali putaran hash dijalankan, serupa dengan parameter biaya di Blowfish. Jumlah siklus default adalah 5000, nilai minimum adalah 1000, dan nilai maksimum adalah 999,999,999. Nilai N apa pun di luar rentang ini akan dikonversi ke nilai batas terdekat.
[CRYPT_SHA_512] - Enkripsi SHA-512 memiliki garam 16 karakter, dimulai dengan $6$. Jika string garam dimulai dengan "rounds=<N>$", nilai numerik N digunakan untuk mewakili berapa kali putaran hash dijalankan, mirip dengan parameter biaya di Blowfish. Jumlah siklus default adalah 5000, nilai minimum adalah 1000, dan nilai maksimum adalah 999,999,999. Nilai N apa pun di luar rentang ini akan dikonversi ke nilai batas terdekat.
Pada sistem yang fungsi ini mendukung beberapa algoritme, konstanta di atas disetel ke "1" jika didukung dan "0" jika didukung.
Catatan: Tidak ada fungsi dekripsi yang sesuai. Fungsi crypt() menggunakan algoritma satu arah.
ruang bawah tanah( str,garam )
parameter | menggambarkan |
---|---|
str | Diperlukan. Menentukan string yang akan dikodekan. |
garam | Opsional. String yang digunakan untuk menambah jumlah karakter yang dikodekan agar pengkodean lebih aman. Jika tidak ada argumen garam yang diberikan, argumen tersebut akan dihasilkan secara acak setiap kali fungsi dipanggil. |
Nilai pengembalian: | Mengembalikan string terenkripsi, atau jika gagal, string kurang dari 13 karakter yang dijamin berbeda dari garam. |
---|---|
Versi PHP: | 4+ |
Catatan pembaruan: | Di PHP 5.3.7, mode Blowfish $2x$ dan $2y$ ditambahkan untuk menangani potensi serangan tingkat tinggi. Di PHP 5.3.2, konstanta baru SHA-256 dan SHA-512 ditambahkan. Mulai PHP 5.3.2, Blowfish akan mengembalikan string "kegagalan" ("*0" atau "*1") pada loop yang tidak valid alih-alih kembali ke DES. Sejak PHP 5.3.0, PHP hadir dengan implementasi enkripsi MD5, implementasi DES standar, implementasi DES yang diperluas, dan algoritma Blowfish. Jika sistem tidak mendukung algoritma di atas, maka algoritma PHP sendiri akan digunakan. |
Gunakan htpasswd untuk enkripsi crypt():
<?php // Tetapkan kata sandi $password = ' mypassword ' ; // Dapatkan nilai hash, gunakan nilai garam otomatis $hash = ruang bawah tanah ( $kata sandi ) ? >Dalam contoh ini, kami menggunakan tipe hash yang berbeda:
<?php jika ( CRYPT_STD_DES == 1 ) { gema ' Standar DES : ' . ruang bawah tanah ( ' rasmuslerdorf ' , ' rl ' ) " n " ; jika ( CRYPT_EXT_DES == 1 ) { gema ' DES yang diperluas: ' . ruang bawah tanah ( ' rasmuslerdorf ' , ' _J9..rasm ' ) " n " ; jika ( CRYPT_MD5 == 1 ) { gema ' MD5: ' . ruang bawah tanah ( ' rasmuslerdorf ' , ' $1$rasmusle$ ' ) " n " ; jika ( CRYPT_BLOWFISH == 1 ) { gema ' Blowfish: ' .ruang bawah tanah ( ' rasmuslerdorf ' , ' $ 2a $ 07$usesomesillystringforsalt$ ' ) " n " ; jika ( CRYPT_SHA256 == 1 ) { gema ' SHA-256: ' .ruang bawah tanah ( ' rasmuslerdorf ' , ' $5$ rounds = 5000$usesomesillystringforsalt$ ' ) " n " ; jika ( CRYPT_SHA512 == 1 ) { gema ' SHA-512: ' .ruang bawah tanah ( ' rasmuslerdorf ' , ' $6$ rounds = 5000$usesomesillystringforsalt$ ' ) " n " ; ?>Kode di atas menghasilkan keluaran sebagai berikut (tergantung pada sistem operasi):
DES Standar: rl.3StKT.4T8MEDES yang diperluas: _J9..rasmBYk8r9AiWNcMD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hiSHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6SHA-512: $6$putaran=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21