對不起,這個很奇怪的問題。我理解用於傳輸數據的base64編碼(即MIME的Base64編碼)的目的,但我不知道是否需要對base64編碼我的鹽。我需要base64編碼我的鹽(哈希密碼)嗎?
我寫了一個實用工具類(抽象基類確實):
use Symfony\Component\Security\Core\Encoder\BasePasswordEncoder;
abstract class AbstractCryptPasswordEncoder extends BasePasswordEncoder
{
/**
* @return string
*/
protected abstract function getSaltPrefix();
/**
* @return string
*/
protected abstract function getSalt();
/**
* {@inheritdoc}
*/
public function encodePassword($raw, $salt = null)
{
return crypt($raw, $this->getSaltPrefix().$this->getSalt());
}
/**
* {@inheritdoc}
*/
public function isPasswordValid($encoded, $raw, $salt = null)
{
return $encoded === crypt($raw, $encoded);
}
}
真正的實現類將是:
class Sha512CryptPasswordEncoder extends AbstractCryptPasswordEncoder
{
/**
* @var string
*/
private $rounds;
/**
* @param null|int $rounds The number of hashing loops
*/
public function __construct($rounds = null)
{
$this->rounds = $rounds;
}
/**
* {@inheritdoc}
*/
protected function getSaltPrefix()
{
return sprintf('$6$%s', $this->rounds ? "rounds={$this->rounds}$" : '');
}
/**
* {@inheritdoc}
*/
protected function getSalt()
{
return base64_encode(openssl_random_pseudo_bytes(12));
}
}
的關鍵部分是鹽的產生,這將嵌入密碼:我是否需要base64_encode
出於任何原因(存儲),假設它永遠不會通過電線發送?
參考這個問題:http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords但是,沒有 - 你不應該在哈希密碼上使用base64。 –