(PHP 4, PHP 5)
crypt — Еднопосочно криптиране на низ (хеширане)
crypt() връща низ, криптиран на базата на стандарния Unix DES алгоритъм за криптиране или на базата на други алгоритми достъпни в системата.
Някои операционни системи поддържат повече от един вид криптиране. Всъщност, понякога стандартното криптиране базирано на DES алгоритъма се заменя с криптиране базирано на MD5 алгоритъма. Типът на криптиране зависи от salt параметъра. По време на инсталацията, PHP определя възможностите на функцията crypt и приема ключове и за други типове криптирания. Ако не е зададен ключ, PHP ще генерира стандартен двузнаков salt по подразбиране, освен ако текущият тип на криптиране на системата е MD5. В този случай ще се генерира случаен MD5-съвместим salt. В PHP е установена константата CRYPT_SALT_LENGTH, която указва дали обикновен двузнаков salt може да се използва във вашата система или е приложим по-дългият дванадесет знаков salt.
Ако използвате предоставения salt, трябва да знаете, че той се генерира само веднъж. Ако извиквате тази функция многократно, това може да повлияе на изхода и на сигурността. Функцията crypt(), която използва стандартно DES криптиране връща salt-а като първите два символа от изхода. Също така, използва само първите осем знака от параметъра str , така че, по-дълги низове, започващи със същите осем знака ще генерират същият резултат (ако се използва същият salt).
В системи, при които функцията crypt() поддържа множество типове криптиране, следните константи са установени в 0 или 1, в зависимост дали дадения тип е наличен:
Низът, който ще се криптира.
Незадължителен salt низ, на базата на който се извършва криптирането. Ако не е зададен, такъв ще бъде генериран по случаен начин от PHP при всяко извикване на тази функция.
Важно е да се знае, че ако е зададен salt низа, то ключа се генерира само веднъж. При повторното извикване на функцията това може да повлияе на резултата от изпълнението и на сигурността.
Връща криптиран низ.
Example #1 Примери за crypt()
<?php
$password = crypt('mypassword'); // нека salt параметъра се генерира автоматично
/* Трябва да предадете целия резултат от crypt() като salt при сравняване
на парола, за да избегнете проблеми при употребата на различни алгоритми
за хеширане. (Както е казано по-горе, стандартното базирано на DES хеширане
използва двузнаков salt, но базираното на MD5 алгоритъма хеширане използва 12.) */
if (crypt($user_input, $password) == $password) {
echo "Password verified!";
}
?>
Example #2 Употреба на crypt() с htpasswd
<?php
// Установяване на паролата
$password = 'mypassword';
// Връща хеш стойността, оставяйки salt параметъра да бъде автоматично генериран
$hash = crypt($password);
?>
Example #3 Употреба на crypt() с различни типове криптиране
<?php
if (CRYPT_STD_DES == 1) {
echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
}
if (CRYPT_EXT_DES == 1) {
echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";
}
if (CRYPT_MD5 == 1) {
echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
}
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$rasmuslerd...........$') . "\n";
}
?>
Примерът по-горе ще изведе нещо подобно на:
Standard DES: rl.3StKT.4T8M Extended DES: _J9..rasmBYk8r9AiWNc MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0 Blowfish: $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra
Забележка: Функция за декриптиране не съществува, тъй като crypt() използва еднопосочен алгоритъм.