Функции за низове
PHP Manual

crypt

(PHP 4, PHP 5)

cryptЕднопосочно криптиране на низ (хеширане)

Описание

string crypt ( string $str [, string $salt ] )

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, в зависимост дали дадения тип е наличен:

Параметри

str

Низът, който ще се криптира.

salt

Незадължителен 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() използва еднопосочен алгоритъм.

Вж. също


Функции за низове
PHP Manual