PHP crypt() -funktio

Määrittely ja käyttö

crypt() -funktio palauttaa DES, Blowfish tai MD5-algoritmilla salatun merkkijonon.

Eri käyttöjärjestelmissä toiminta on erilaista, jotkut käyttöjärjestelmät tukevat yhtä tai useampaa algoritmilajia. Asennuksen yhteydessä PHP tarkistaa, mitä algoritmeja on käytettävissä ja mitä algoritmia käytetään.

Tarkka algoritmi riippuu suola-argumentin muodosta ja pituudesta. Suola voi tehdä salauksesta turvallisempaa lisäämällä erityisen salausmenetelmän erityisen merkkijonon tuottamien merkkijonojen määrää.

Tässä on joitakin PHP-funktion crypt() kanssa käytettäviä määriä. Näiden määrien arvot asetetaan asennuksen yhteydessä PHP:n toimesta.

Konstit:

[CRYPT_SALT_LENGTH] Oletusarvoinen salauspituus. Käyttää DES-salausta, pituus on 2.
[CRYPT_STD_DES] DES-algoritmalla toimiva hajutus käyttää "./0-9A-Za-z"-merkkijonon kahdeksaa merkkiä suolana. Epäilyttävien merkkien käyttö suolassa johtaa crypt() -toiminnon epäonnistumiseen.
[CRYPT_EXT_DES] Laajennettu DES-algoritmalla toimiva hajutus. Suola-arvo on 9 merkin merkkijono, joka koostuu yhdestä alaviivasta ja sen jälkeen 4 tavun toistomäärästä ja 4 tavun suolasta. Ne koodataan tulostettaviksi merkeiksi, jokainen merkkijono 6 merkkiä pitkä, ja vähiten tehokkaat merkit käytetään ensin. 0-63 merkit koodataan "./0-9A-Za-z". Epäilyttävien merkkien käyttö suolassa johtaa crypt() -toiminnon epäonnistumiseen.
[CRYPT_MD5] MD5-hajautus käyttää 12-merkkistä merkkijonoa, joka alkaa merkillä $1$, suolana.
[CRYPT_BLOWFISH] Blowfish-algoritmi käyttää seuraavaa suolaa: "$2a$", kaksi sijaintia cost-parametrille, "$" ja 64-bittinen merkkijono, joka koostuu merkeistä "./0-9A-Za-z". Jos suolassa käytetään merkkejä, jotka eivät kuulu tähän alueeseen, crypt() palauttaa tyhjän merkkijonon. Kaksi sijaintia cost-parametrille on kiertojen määrä 2:n potenssina, sen arvo on 04-31, ja jos arvo on tätä ulkopuolella, crypt() epäonnistuu.
CRYPT_SHA256 SHA-256-algoritmi käyttää 16-merkkistä merkkijonoa, joka alkaa merkillä $5$, hajautettavaksi. Jos suola-merkkijono alkaa "rounds=<N>$", N:n numeroarvo käytetään määrittämään hajautuskiertojen määrää, mikä on samanlaista kuin Blowfish-algoritmin cost-parametrin kanssa. Oletuskiertomäärä on 5000, vähimmäismäärä 1000 ja enimmäismäärä 999,999,999. Arvot, jotka ovat tämän ulkopuolella, muunnetaan lähimmäksi arvoon.
CRYPT_SHA512 SHA-512-algoritmi käyttää 16-merkkistä merkkijonoa, joka alkaa merkillä $6$, hajautettavaksi. Jos suola-merkkijono alkaa "rounds=<N>$", N:n numeroarvo käytetään määrittämään hajautuskiertojen määrää, mikä on samanlaista kuin Blowfish-algoritmin cost-parametrin kanssa. Oletuskiertomäärä on 5000, vähimmäismäärä 1000 ja enimmäismäärä 999,999,999. Arvot, jotka ovat tämän ulkopuolella, muunnetaan lähimmäksi arvoon.

Järjestelmässä, jossa tuetaan useita algoritmeja, asetaan yllä olevat muuttujat arvoon "1", jos niitä tuetaan, muuten arvoon "0".

Huomautus:Ei vastaavaa purkufunktiota. crypt()-funktio käyttää yksisuuntaista algoritmia.

Syntaksi

crypt(str,salt)
Parametrit Kuvaus
str Välttämätön. Määrittää koodattava merkkijono.
salt Valinnainen. Käytetään lisäämään koodatun merkkijonon määrää, jotta koodaus on turvallisempaa. Jos suola-parametria ei anneta, PHP luo satunnaisen suolan aina, kun funktio kutsutaan.

Tekninen yksityiskohta

Palautusarvo: Palauttaa salattunsa merkkijonon tai alle 13 merkin merkkijonon, jotta epäonnistuessaan se voidaan erottaa suolasta.
PHP versio 4+

更新日志

Versio Kuvaus
5.3.2 Lisättiin Ulrich Drepperin toteutukseen perustuva SHA-256- ja SHA-512-algoritmin crypt.
5.3.2 Oikaistiin Blowfish-algoritmin ongelma, joka johtui laittomasta silmukasta, palautti "epäonnistui"-merkkijonon ("*0" tai "*1") sen sijaan, että siirtyisi DES-algoritmiin.
5.3.0 PHP sisältää oman MD5 Crypt toteutuksensa, mukaan lukien standardi DES-algoritmi, laajennettu DES-algoritmi sekä Blowfish-algoritmi. Jos järjestelmässä ei ole vastaavaa toteutusta, PHP käyttää omaa toteutustaan.

Esimerkki

Esimerkki 1

Tässä esimerkissä testataan erilaisia algoritmeja:

<?php
// Kaksi merkkiä salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES ei tuettu.\n<br>";
}
// 4 merkin salt
if (CRYPT_EXT_DES == 1)
{
echo "Laajennettu DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Laajennettu DES ei tuettu.\n<br>";
}
// Aloitetaan $1$:llä oleva 12 merkkiä
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 ei tuettu.\n<br>";
}
// Salt alkaa $2a$:llä. Kaksinumeroisen kustannusparametrin: 09. 22 merkkiä
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES ei tuettu.\n<br>";
}
// Alkaa $5$:lla olevalla 16-merkkisellä suolalla. Oletusarvoon asetettu kierrosten määrä on 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 ei tuettu.\n<br>";
}
// Alkaa $5$:lla olevalla 16-merkkisellä suolalla. Oletusarvoon asetettu kierrosten määrä on 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 ei tuettu.";
}
?>

Yllä olevan koodin tulostus (riippuen käyttöjärjestelmästä):

Standard DES: stqAdD7zlbByI
Laajennettu 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.