Forum und email

crypt

(PHP 4, PHP 5)

crypt — En-vejs strengkryptering (hashing)

Beskrivelse

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

crypt() returnerer en standard Unix DES-baseret krypteret streng, eller en anden algoritme som måtte være tilgængelig på systemet. Parametre er en streng der skal krypteres og en frivillig salt streng til at basere kryptering på. Se Unix man siden om din krypteringsfunktion for mere information.

Hvis salt parametren ikke bliver givet, vil en tilfældig blive genereret af PHP hver gang du kalder denne funktion.

Nogle operativsystemer understøtter flere end én type kryptering. Faktisk, nogle gange er den standard DES-baserede kryptering erstattet af en MD5-baseret krypteringsalgoritme. Krypteringstypen bliver aktiveret af salt -parametren. Ved installering fastslår PHP crypt-funktionens evne og vil acceptere salte for andre krypteringstyper. Hvis intet salt er tilsat vil PHP autogenerere en standard totegns salt som standard, medmindre standardkrypteringenstypen på systemet er MD5, hvor en tilfældig MD5-kompatibel salt bliver genereret. PHP sætter en konstant kaldet CRYPT_SALT_LENGTH som fortæller dig om en regulær totegns salt passer til dit system eller den længere tolvtegns salt er anvendelig.

Hvis du bruger den tilføjede salt, skal du være opmærksom på at salten bliver genereret én gang. Hvis du kalder denne funktion gentagende gange kan dette have effekt på både udseende og sikkerhed.

Den standard DES-baserede kryptering crypt() returnerer salten som de to første tegn i dataen. Den bruger også kun de første otte karakterer af str , så længere strenge som starter med de samme otte karakterer vil gerere det samme resultat (når den samme salt er brugt).

På systemer hvor crypt()-funktionen understøtter flere krypteringstyper, vil de følgende konstanter være sat til 0 eller 1 afhængig af om den givne type er tilgængelig:

  • CRYPT_STD_DES - Standard DES-baseret kryptering med en totegns salt
  • CRYPT_EXT_DES - Udvidet DES-baseret kryptering med en nitegns salt
  • CRYPT_MD5 - MD5-kryptering med en tolvtegns salt startende med $1$
  • CRYPT_BLOWFISH - Blowfish kryptering med en sekstenstegns salt startende med $2$ eller $2a$

Note: Der er ingen dekrypteringsfunktion, siden crypt() bruger en en-vejs algoritme.

Example#1 crypt() eksempler

<?php
$password 
crypt('mypassword'); // generer salten automatisk

/* Du skal give hele resultatet af crypt() som salt for at sammenligne et
 * kodeord, for at forhindre problemer når forskellige hashing-algoritmer
 * bliver brugt. (Som nævnt ovenfor, standard DES-baseret kodeords hashing
 * bruger en 2-tegns salt, men MD5-baseret hasing bruger 12.) */
if (crypt($user_input$password) == $password) {
   echo 
"Kodeord verificeret!";
}
?>

Example#2 Brug af crypt() med htpasswd

<?php
// Sæt kodeordet
$password 'mypassword';

// Hent hash'en, og lader salten blive genereret automatisk
$hash crypt($password);
?>

Example#3 Brug af crypt() med forskellige krypteringstyper

<?php
if(CRYPT_STD_DES == 1) {
    echo 
'Standard DES: '.crypt('rasmuslerdorf''rl') . "\n";
}
if (
CRYPT_EXT_DES == 1) {
    echo 
'Udvidet 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";
}
?>

Ovenstående eksempel vil udskrive noget der ligner:

Standard DES: rl.3StKT.4T8M
Udvidet DES:  _J9..rasmBYk8r9AiWNc
MD5:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:     $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra

Se også md5() og the Mcrypt extension.