(PECL xpass >= 1.1.0)
crypt_gensalt β ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΠΎΠ»Ρ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ crypt
Π€ΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ crypt() ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΎΠ»ΠΈ.
prefix
ΠΠ΅ΡΠΎΠ΄ Ρ
Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° CRYPT_PREFIX_*.
ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ null ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±Π΅ΡΠ΅Ρ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ ΠΈΠ· Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ Ρ
Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
count
Π£ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ
Π΅ΡΠ°; Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈ ΡΠΎΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π½Ρ
Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ
Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠΈΡΠ»Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡΠΎΠ³ΠΈΠΌ Ρ
Π΅ΡΠ°ΠΌ
Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ count Π·Π½Π°ΡΠ΅Π½ΠΈΡ 0 ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±Π΅ΡΠ΅Ρ Π½ΠΈΠ·ΠΊΡΡ ΡΠ΅Π½Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ null, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠΎΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ crypt_gensalt()
<?php
// ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠΎΠ»ΠΈ
$salt = crypt_gensalt(CRYPT_PREFIX_BLOWFISH);
// Π₯Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ
$hash = crypt("secret", $salt);
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° Ρ
Π΅ΡΠ°
$test = hash_equals(crypt("secret", $hash), $hash);
var_dump($salt, $hash, $test);
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
string(29) "$2y$05$GcPykP.Am8C1.dGamdpwW." string(60) "$2y$05$GcPykP.Am8C1.dGamdpwW.1RR.7uicWvJPZfJfCEizZHqVWwuaJLm" bool(true)