您可以在SS中創建自己的密碼「encryptor」類(不是100%正確的命名...)。我看了一下SF2 implementation,這是一個未經測試的起點。它不檢查鹽中的花括號。
<?php
class PasswordEncryptor_Symfony2 extends PasswordEncryptor {
protected $algorithm = 'sha512';
protected $iterations = 5000;
protected $encodeHashAsBase64 = true;
public function encrypt($password, $salt = null, $member = null) {
$salted = $password . '{' . $salt . '}';
$digest = hash($this->algorithm, $salted, true);
for ($i = 1; $i < $this->iterations; $i++) {
$digest = hash($this->algorithm, $digest.$salted, true);
}
return $this->encodeHashAsBase64 ? base64_encode($digest) : bin2hex($digest);
}
}
你需要通過YML config來註冊這個類中的mysite/_config/encryptors.yml:
PasswordEncryptor:
encryptors:
symfony2:
PasswordEncryptor_Symfony2:
並將其設置爲默認值(如果需要的話)在mysite的/ _config.php:
Security::set_password_encryption_algorithm('symfony2');
爲了確保SF2遷移現有的哈希值將與這個類進行檢查,需要在Member
表「Symfony2的」設置PasswordEncryption
列(每成員已將其使用的加密器別名分別設置爲允許進行這些類型的遷移)。因此,在SS中創建的任何新用戶仍然可以使用默認的SS密碼散列(「blowfish」別名)。
我能夠將密碼加密算法更改爲「sha1」,不幸的是它仍然無法工作,因爲symfony使用以下模式$ salt。$ password,而SS3使用以下$ password。$ salt。我仍然在思考如何切換鹽和密碼的位置,而不會攻擊SS3內核。順便說一句,感謝您的意見。 – Sktzoootech