2012-12-29 66 views
0

我需要遷移用戶的幫助建立了一個網站使用的Symfony2到Silverstripe 3.遷移用戶帳戶從Symfony2中到Silverstripe 3

我得到了用戶的表從symfony內建網站與SHA1哈希密碼和鹽。我想將用戶導入新設置的Silverstripe 3網站。我試圖通過手動插入哈希密碼,salt並將密碼加密算法更改爲sha1而將示例條目插入到SS3s Member Table中,但它不起作用。我也嘗試在我的_config.php中使用Security::set_password_encryption_algorithm來覆蓋從blowfish到sha1的密碼加密,但它似乎沒有更改密碼算法。

我真的需要幫助,因爲我只剩下幾天交付項目。關於如何進行遷移的任何想法?

回答

1

symfony2密碼加密不僅加密密碼+散列不僅一次而且多次(默認值爲5000)。 Symfony的還串接密碼,這樣哈希:

$password . '{' . $salt . '}' 

你會需要或者複製這種技術silverstripe 3或在您的Silverstripe 3應用程序中使用symfony的加密。您可以在查看Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder時查看實施情況。

另一種方法是重置每個密碼並在新應用程序啓用後向每個用戶發送一封電子郵件,以便用戶可以添加他的密碼。在這種情況下,您不需要遷移密碼,從長遠來看這可能會更好。

+0

我能夠將密碼加密算法更改爲「sha1」,不幸的是它仍然無法工作,因爲symfony使用以下模式$ salt。$ password,而SS3使用以下$ password。$ salt。我仍然在思考如何切換鹽和密碼的位置,而不會攻擊SS3內核。順便說一句,感謝您的意見。 – Sktzoootech

0

您可以在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」別名)。

相關問題