为此,您可以在 SS 中创建自己的密码“加密器”类(不是 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 配置在 mysite/_config/encryptors.yml 中注册此类:
PasswordEncryptor:
encryptors:
symfony2:
PasswordEncryptor_Symfony2:
并将其设置为 mysite/_config.php 中的默认值(如果需要):
Security::set_password_encryption_algorithm('symfony2');
为了确保使用此类检查从 SF2 迁移的现有哈希,您需要将表中的PasswordEncryption
列设置Member
为“symfony2”(每个成员都有其使用的加密器别名单独设置以允许这些类型的迁移)。因此,在 SS 中创建的任何新用户仍然可以使用默认的 SS 密码散列(“blowfish”别名)。