PHP crypt() function

Paglilinaw at Paggamit

Ang function na crypt() ay ibabalik ang string na nangangalaga ng encryption na gumagamit ng DES, Blowfish, o MD5 algorithm.

Ang pagbabahagi ng function na ito ay magiging iba-iba sa iba't ibang operating system, ang ilan sa mga operating system ay sumusuporta ng mahigit isang uri ng algoritmo. Sa panahon ng pag-install, ang PHP ay sisiyasat kung aling algoritmo ang magagamit at kung aling algoritmo ang gagamitin.

Ang partikular na algoritmo ay depende sa format at haba ng parameter ng salt. Ang salt ay maaaring gawing mas ligtas ang encryption sa pamamagitan ng pagdagdag ng bilang ng string na nilikha ng partikular na string na ginagamit para sa encryption.

Mayroon kaming ilang konstante na ginagamit kasama ang function na crypt(). Ang halaga ng konstante na ito ay inilagay ng PHP sa panahon ng pag-install.

Konstante:

[CRYPT_SALT_LENGTH] Ang pangkaraniwang haba ng encryption. Ginagamit ang standard na DES encryption, ang haba ay 2.
[CRYPT_STD_DES] Ang hash na base sa standard na algoritmo ng DES ay gumagamit ng dalawang character mula sa character "./0-9A-Za-z" bilang salt. Ang paggamit ng ilegal na character sa salt ay magiging dahilan sa pagkabigo ng crypt().
[CRYPT_EXT_DES] Ang paglalaan ng hash base sa algoritmo ng DES. Ang salt ay isang string ng 9 na character, na binubuo ng isang underscore na sinundan ng 4 na byte na pagliko at 4 na byte na salt. Ito ay nangangalaga bilang printable character, bawat character ay 6 na bit, ang pinakamaliit na bit na makakarating ang pinakamataas na prayoridad. Ang 0 hanggang 63 ay nangangalaga bilang "./0-9A-Za-z". Ang paggamit ng ilegal na character sa salt ay magiging dahilan sa pagkabigo ng crypt().
[CRYPT_MD5] Ang hashing na MD5 ay gumagamit ng isang 12-character string na salt na nagsisimula sa $1$.
[CRYPT_BLOWFISH] Ang algoritmo na Blowfish ay gumagamit ng salt na nagsisimula sa "$2a$", isang dalawang-digit na parameter na cost, "$", at isang 64-character string na binubuo ng mga character na nasa saklaw ng "./0-9A-Za-z". Ang paggamit ng character na wala sa saklaw na ito ay magiging dahilan para sa pagbabalik ng crypt() ng isang empty string. Ang dalawang-digit na parameter na cost ay ang logaritmo ng bilang ng loop na may base na 2, na may saklaw na 04-31. Ang bilang na walang saklaw sa saklaw na ito ay magiging dahilan para sa pagkabigo ng crypt().
CRYPT_SHA256 Ang algoritmo na SHA-256 ay gumagamit ng isang 16-character string na salt na nagsisimula sa $5$ para sa hashing. Kung ang string ng salt ay nagsisimula sa "rounds=<N>$", ang bilang ng N ay magiging tukoy ng bilang ng beses na magsasagawa ng hashing loop, na katulad ng parameter na cost sa algoritmo na Blowfish. Ang default na bilang ng loop ay 5000, ang pinakamaliit ay 1000, at ang pinakamalaki ay 999,999,999. Ang bilang ng N na walang saklaw ay magiging malapit na halaga.
CRYPT_SHA512 Ang algoritmo na SHA-512 ay gumagamit ng isang 16-character string na salt na nagsisimula sa $6$ para sa hashing. Kung ang string ng salt ay nagsisimula sa "rounds=<N>$", ang bilang ng N ay magiging tukoy ng bilang ng beses na magsasagawa ng hashing loop, na katulad ng parameter na cost sa algoritmo na Blowfish. Ang default na bilang ng loop ay 5000, ang pinakamaliit ay 1000, at ang pinakamalaki ay 999,999,999. Ang bilang ng N na walang saklaw ay magiging malapit na halaga.

Sa mga sistema na suporta ang ilang algoritmo, kung ang mga katulad na constant ay suportado, magtatakbo ito sa "1", kung hindi, magtatakbo ito sa "0".

Komentaryo:Wala ang katugmang function na nagdecrypt. Ang function na crypt() ay gumagamit ng isang isang-taong algoritmo.

Kalsada

crypt(str,salt)
Parametro Paglalarawan
str Hindaya. Tinutukoy ang string na dapat na-encode.
salt Opsiyonal. Ginagamit upang dagdagan ang bilang ng na-encode na character, upang palakasin ang seguridad ng encoding. Kung hindi naibigay ang parameter na salt, ang PHP ay mag-generate ng random na salt bawat pagkakakapag-eksikyuwate ng function.

Detalye ng teknolohiya

Bumalik ang halaga: Bumalik ang nakatipon na string na pinag-encrypt o isang string na mas maliit sa 13 character, upang maiba ito sa salt sa pagkakamali.
PHP na bersyon: 4+

Aking log para sa mga pag-updated

Bersyon Paliwanag
5.3.2 Nadagdagan ang crypt na nakabase sa algoritmo ng SHA-256 at SHA-512, base sa implementasyon ni Ulrich Drepper.
5.3.2 Isinadya ang problema ng Blowfish algorithm dahil sa ilegal na ikot, na binabalik ang string na "pagbubulag" ('*0' o '*1') sa halip na gamitin ang DES algorithm.
5.3.0 Ang PHP ay may sariling implementasyon ng MD5 Crypt, kasama ang standard DES algorithm, ang extended DES algorithm at ang Blowfish algorithm. Kung ang sistema ay walang kahit anong implementasyon, gagamitin ng PHP ang kanyang sariling implementasyon.

Mga egemplo

Egemplo 1

Sa eksemplo nito, ay magtutest kami ng iba't ibang algoritmo:

<?php
// 两字符 salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 字符 salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
//以 $1$ 开始于 12 字符
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// 以 $2a$ 开始于 Salt。双数字的 cost 参数:09. 22 字符
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// Salt starts with $5$, 16-character salt. The default number 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>";
}
// Salt starts with $5$, 16-character salt. The default number is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>

The output of the above code (depending on the operating system):

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.