2015-07-28 32 views
1

我有一個數據庫,其中包含從magento數據庫導入的客戶,我想知道是否可以使用我已有的散列或者如果唯一的方法是要求全部客戶更改密碼。如何使用C驗證來自magento數據庫的散列號

我的應用程序使用C#我試圖使用MD5,但結果它不一樣。

密碼:741963 Magento的哈希:c8cb61663ba8b4adadc16687d5e2a636:W0 C#簡單的MD5:CDE8E3E58AB6E2D16CBE1A0EE19FE3A3

我讀過,Magento的使用鹽醃哈希和鹽是冒號後,但我不知道如何用它。

如果有人有線索如何解決這個問題..

謝謝!

+0

你想刪除鹽和解密爲純文本的MD5? – Sundar

回答

0

以magento方式存儲密碼。

Magento沒有使用md5-hash存儲密碼。

它使用鹽醃md5。 :)

讓我解釋一下,在md5-ing用戶鍵入的密碼之前,Salt字符串會連接到密碼,然後它會被加密。

  1. 例如,如果用戶鍵入密碼,這將要連接到隨機生成的鹽字符串,在這裏讓我們假設我們的鹽串,salted_rdom_val

  2. 兩個值將被連接起來這樣123456salted_rdom_val

  3. 現在,他們會去的MD5()函數。在中間:這會產生類似654d2ea4a4dd03bc728b8933c61be75d

  4. 生成MD5後, 的MD5將被串聯起來的隨機鹽與。 是這樣的。

    2c433dcfc6e3dd9973195bac308482e3:salted_rdom_val

  5. 所以,現在的表(customer_entity_varchar)都會有這個值

在Magento的方式進行身份驗證客戶

Magento的認證將完成在以下步驟中。

  1. 假設,電子郵件的可用性檢查已經完成,它只是檢查用戶是否註冊在magento站點。

  2. 首先他們會從客戶表單中收到密碼。讓我們假設明文爲'密碼'

  3. 現在,我們不能通過使用他提供的電子郵件ID獲取客戶的確切密碼。

例如,

$orig_pass = 2c433dcfc6e3dd9973195bac308482e3:salted_rdom_val; 
  • 的Magento會爆炸此字符串是否以 「:」 參數。爆炸將使這兩部分被存儲爲一個數組。
  • 現在我們在爆炸陣列中有兩個值。

    $exploded[0]= 2c433dcfc6e3dd9973195bac308482e3; 
    
    $exploded[1] = salted_rdom_val; 
    
  • 這裏談到的認證部分,Magento的將串聯的$分解[1]與密碼明文是 '密碼'

    $變量= $密碼$分解[1]。

    $ variable = passwordsalted_rdom_val;

  • ,它會做的哈希,

    md5($variable); 
    
    md5(passwordsalted_rdom_va); 
    
    The output of md5() is 2b339a6b211bc1436cd1e45e2db7f8d6. 
    
  • 現在的Magento將同時檢查哈希,如果哈希是相同的,該會議將被創建。
  • 否則,您將收到一條錯誤消息「請檢查您的電子郵件ID和密碼。」

    這是magento如何驗證客戶的密碼,您可以調用一些csharp包裝來獲得相同的結果。

    +1

    我認爲你的方法是錯誤的。鹽應該在密碼前面添加,而不是在後面。 –

    +0

    真的嗎?讓我檢查一下.. – Sundar

    +0

    你有沒有機會檢查它? –

    1

    正如你看到你的Magento散列中有一個冒號。結腸後的W0是鹽。散列密碼的algoritm是

    hash(salt + password) 
    

    如果試圖calc下的W0741963 MD5你會得到正確的哈希c8cb61663ba8b4adadc16687d5e2a636

    相關問題