Я искал лучший способ шифрования паролей для использования с моей панелью, я решил пойти дальше и использовать BCRYPT просто из-за стоимости каждого шифрования и того факта, что он обычно считается одним из лучших доступных на Текущее время.
Я использую двусторонние соли, поэтому уникальную соль, которая есть у каждого пользователя, а затем, очевидно, соль, хранящуюся в моем приложении, я заметил довольно странное поведение... и согласно документации PHP это поведение нормально?
Во всяком случае, вот код, который я использую:
$Crypto = new Crypto;
echo $Crypto->encrypt( "123456789abcdefghijklm", "StackOverflow_Is_Awesome!" ); // First parameter being the "User Salt", second being the password.
// Above outputs $2y$13$123456789abcdefghijkleepFY8JLvsf2YbnWolqQyO3DIzrCeNIu
А теперь класс Crypto:
<?php
// ASSUMING $this->hashingSalt = HBSNi3y7ruhbVGkhdg83ijdbvghiojkgudL;JP
class Crypto {
private $hashingSalt, $database;
public function __construct( $salt )
{
$this->hashingSalt = $salt;
$this->database = new DatabaseFunctions();
}
public function encrypt( $salt, $password )
{
$options = array(
'cost' => 13,
'salt' => $salt //22 chars
);
return password_hash( $password . $this->hashingSalt, PASSWORD_BCRYPT, $options);
}
}
Итак, меня интересует, с какой стати эта функция просто добавляет соль, установленную в параметрах, в начало выводимой строки? Это действительно сбивает с толку... потому что это не совсем то, что я бы назвал безопасным, скорее побеждает объект для меня.
Может ли кто-нибудь посоветовать, попытаться объяснить, что я полностью просматриваю? Спасибо
Документация по PHP: http://php.net/manual/en/function.password-hash.php