PHP crypt() Funkcja
❮ Odniesienie do ciągów PHP
Definicja i użycie
Funkcja crypt() zwraca zaszyfrowany ciąg przy użyciu algorytmów DES, Blowfish lub MD5.
Ta funkcja działa inaczej w różnych systemach operacyjnych. PHP sprawdza, jakie algorytmy są dostępne i jakich użyć po zainstalowaniu.
Parametr sól jest opcjonalny. Jednak crypt() tworzy słabe hasło bez soli. Upewnij się, że określiłeś wystarczająco mocną sól, aby zapewnić lepsze bezpieczeństwo.
Istnieje kilka stałych, które są używane razem z funkcją crypt(). Wartość tych stałych jest ustawiana przez PHP podczas instalacji.
Stałe:
- [CRYPT_STD_DES] – Standardowy skrót oparty na DES z dwuznakową solą z alfabetu „./0-9A-Za-z”. Użycie nieprawidłowych znaków w soli spowoduje niepowodzenie tej funkcji.
- [CRYPT_EXT_DES] – Rozszerzony hash oparty na DES z dziewięcioznakową solą składającą się z podkreślenia, po którym następują 4 bajty licznika iteracji i 4 bajty soli. Są one zakodowane jako znaki drukowane, 6 bitów na znak, najpierw najmniej znaczący znak. Wartości od 0 do 63 są zakodowane jako "./0-9A-Za-z". Użycie nieprawidłowych znaków w soli spowoduje awarię funkcji.
- [CRYPT_MD5] – haszowanie MD5 z 12-znakową solą zaczynającą się od $1$
- [CRYPT_BLOWFISH] – mieszanie Blowfish z solą zaczynającą się od $2a$, $2x$ lub $2y$, dwucyfrowe parametry kosztu „$” i 22 znaki alfabetu „./0-9A-Za-z” . Użycie znaków spoza alfabetu spowoduje, że ta funkcja zwróci ciąg o zerowej długości. Parametr „$” jest logarytmem o podstawie 2 z liczby iteracji dla bazowego algorytmu mieszającego Blowfish-bashed i musi mieścić się w zakresie 04-31. Wartości spoza tego zakresu spowodują awarię funkcji.
- [CRYPT_SHA_256] - hash SHA-256 z 16-znakową solą zaczynającą się od $5$. Jeśli ciąg soli zaczyna się od „rounds=<N>$”, wartość liczbowa N jest używana do wskazania, ile razy pętla mieszająca powinna zostać wykonana, podobnie jak parametr cost w Blowfish. Domyślna liczba rund to 5000, minimalnie 1000 i maksymalnie 999 999 999. Każdy wybór N spoza tego zakresu zostanie obcięty do najbliższego limitu.
- [CRYPT_SHA_512] - hash SHA-512 z 16-znakową solą zaczynającą się od 6$. Jeśli ciąg soli zaczyna się od „rounds=<N>$”, wartość numeryczna N jest używana do wskazania, ile razy pętla mieszająca powinna zostać wykonana, podobnie jak parametr cost w Blowfish. Domyślna liczba rund to 5000, minimalnie 1000 i maksymalnie 999 999 999. Każdy wybór N spoza tego zakresu zostanie obcięty do najbliższego limitu.
W systemach, w których ta funkcja obsługuje wiele algorytmów, powyższe stałe są ustawione na „1”, jeśli są obsługiwane, i „0” w przeciwnym razie.
Uwaga: nie ma funkcji odszyfrowywania. Funkcja crypt() wykorzystuje algorytm jednokierunkowy.
Składnia
crypt(str,salt)
Wartości parametrów
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Szczegóły techniczne
Wartość zwrotu: | Zwraca zakodowany ciąg lub ciąg krótszy niż 13 znaków i na pewno będzie różnić się od soli w przypadku niepowodzenia |
---|---|
Wersja PHP: | 4+ |
Dziennik zmian: | PHP 5.6.0 - Wyświetla ostrzeżenie bezpieczeństwa E_NOTICE, jeśli pominięto sól . PHP 5.3.7 - Dodano tryby 2x$ i 2y$ Blowfish. PHP 5.3.2 - Dodano SHA-256 i SHA-512. Naprawiono zachowanie Blowfish w nieprawidłowych rundach, które zwraca ciąg "failure" ("*0" lub "*1"), zamiast wracać do DES. PHP 5.3.0 - PHP zawiera teraz własną implementację algorytmów MD5 crypt, Standard DES, Extended DES i Blowfish i użyje jej, jeśli system nie obsługuje jednego lub więcej algorytmów. |
Więcej przykładów
Przykład
W tym przykładzie przetestujemy różne algorytmy:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
Wynikiem powyższego kodu może być (w zależności od systemu operacyjnego):
Standard DES: stqAdD7zlbByI
Extended 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.
❮ Odniesienie do ciągów PHP