そのために、SSで独自のパスワード「暗号化」クラス(100%正しい命名ではありません...)を作成できます。私はSF2の実装を見てきましたが、これはテストされていない出発点です。ソルトの中括弧はチェックしません。
<?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);
}
}
mysite/_config/encryptors.yml で、YML 構成を介してこのクラスを登録する必要があります。
PasswordEncryptor:
encryptors:
symfony2:
PasswordEncryptor_Symfony2:
mysite/_config.php で (必要に応じて) デフォルトとして設定します。
Security::set_password_encryption_algorithm('symfony2');
SF2 から移行された既存のハッシュがこのクラスで確実にチェックされるようにするにPasswordEncryption
は、テーブルの列Member
を「symfony2」に設定する必要があります (これらのタイプの移行を可能にするために、各メンバーには使用される暗号化エイリアスが個別に設定されています)。したがって、SS で作成された新しいユーザーは、デフォルトの SS パスワード ハッシュ (「blowfish」エイリアス) を引き続き使用できます。