crypt

(PHP 3, 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 saltstreng 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.

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 funktion rekursivt 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:

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

Eksempel 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!";
}
?>

Eksempel 2. Brug af crypt() med htpasswd

For at lave et kodeord til brug med en apache htpasswd-fil, er du nødt til at bruge de første to bogstaver af kodeordet som salt.

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

// Få hash'en
$hash = crypt($password, substr($password, 0, 2));
?>

Se også md5() og the Mcrypt extension.