PHP crypt() fonksiyonu

Tanım ve Kullanım

crypt() fonksiyonu, DES, Blowfish veya MD5 algoritması ile şifrelenmiş bir string döndürür.

Farklı işletim sistemlerinde bu fonksiyonun davranışı farklıdır, bazı işletim sistemleri birden fazla algoritma türünü destekler. Kurulum sırasında, PHP hangi algoritmanın kullanılabilir olduğunu ve hangi algoritmanın kullanılacağını kontrol eder.

Spesifik algoritmanın salt parametresinin biçimi ve uzunluğuna bağlıdır. Spesifik şifreleme yönteminden türetilen belirli bir string sayısını artırarak, salt şifrelemeyi daha güvenli hale getirebilir.

Burada crypt() fonksiyonu ile birlikte kullanılan bazı sabitler bulunmaktadır. Bu sabit değerleri, kurulum sırasında PHP tarafından ayarlanır.

Sabitler:

[CRYPT_SALT_LENGTH] Varsayılan şifreleme uzunluğu. Standart DES şifreleme kullanılarak, uzunluğu 2'dir
[CRYPT_STD_DES] Standart DES algoritmasına dayalı hash, "./0-9A-Za-z" karakterlerinden iki karakteri tuz olarak kullanır. Tuz değerinde yasadışı karakter kullanımı crypt() başarısızlığına neden olur.
[CRYPT_EXT_DES] DES algoritmasına dayalı genişletilmiş hash. Tuz değeri, 9 karakterli bir string'tir ve 1 tane alt çizgi sonrası 4 byte döngü sayısı ve 4 byte tuz değeri içerir. Bu, yazılabilir karakterlere kodlanmıştır, her karakter 6 bit, en az geçerli bit önceliklidir. 0 ila 63 "./0-9A-Za-z" olarak kodlanmıştır. Tuz değerinde yasadışı karakter kullanımı crypt() başarısızlığına neden olur.
[CRYPT_MD5] MD5 çıkarımı,
[CRYPT_BLOWFISH] Blowfish algoritması,
CRYPT_SHA256 SHA-256 algoritması, $5$ ile başlayan 16 karakterlik bir string tuzu ile çıkarım yapar. Tuz stringi "rounds=<N>$" ile başlıyorsa, N'nin sayısal değeri, çıkarım döngü sayısını belirlemek için kullanılır, bu da Blowfish algoritmasının cost parametresine benzer. Varsayılan döngü sayısı 5000, en düşük 1000, en yüksek 999,999,999'dür. Bu aralığın dışındaki N değerleri en yakın değere dönüştürülür.
CRYPT_SHA512 SHA-512 algoritması, $6$ ile başlayan 16 karakterlik bir string tuzu ile çıkarım yapar. Tuz stringi "rounds=<N>$" ile başlıyorsa, N'nin sayısal değeri, çıkarım döngü sayısını belirlemek için kullanılır, bu da Blowfish algoritmasının cost parametresine benzer. Varsayılan döngü sayısı 5000, en düşük 1000, en yüksek 999,999,999'dür. Bu aralığın dışındaki N değerleri en yakın değere dönüştürülür.

Bu fonksiyonun desteklediği sistemde, yukarıdaki sabitler destekleniyorsa "1" olarak ayarlanır, aksi takdirde "0" olarak ayarlanır.

Yorumlar:Karşılaştırılabilir şifreleme fonksiyonu yok. crypt() fonksiyonu tek yönlü bir algoritma kullanır.

Sözdizimi

crypt(str,salt)
Parametreler Açıklama
str Gerekli. Kodlanacak string'i belirler.
salt Opsiyonel. Kodlanacak karakter sayısını artırmak için kullanılan string, kodun daha güvenli olmasını sağlar. Salt parametresi sağlanmadığında, her seferinde PHP tarafından rastgele bir tuz oluşturulur.

Teknik Açıklamalar

Dönüş Değeri: Şifrelenmiş string'i veya 13 karakterden kısa bir string döndürür, böylece başarısızlık durumunda tuz ile ayrım yapılabilir.
PHP Sürümü: 4+

Güncelleme Günlüğü

Version Description
5.3.2 Based on Ulrich Drepper's implementation, added crypt based on SHA-256 algorithm and SHA-512 algorithm.
5.3.2 Fixed the issue with the Blowfish algorithm due to illegal loops, returning the "failed" string ("*0" or "*1") instead of switching to the DES algorithm.
5.3.0 PHP now includes its own MD5 Crypt implementation, including standard DES algorithm, extended DES algorithm, and Blowfish algorithm. If the system lacks the corresponding implementation, PHP will use its own implementation.

Instance

Example 1

In this example, we will test different algorithms:

<?php
// Two-character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 characters salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// With $1$ starting 12 characters
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// With $2a$ starting Salt. Double-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>";
}
// $5$ ile başlayan 16 karakter salt. Varsayılan döngü sayısı 5000'dir.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 desteklenmiyor.\n<br>";
}
// $5$ ile başlayan 16 karakter salt. Varsayılan döngü sayısı 5000'dir.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 desteklenmiyor.";
}
?>

Yukarıdaki kodun çıktısı (işletim sisteminize bağlı olarak):

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.