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.