我有一張以前由另一家公司創建的哈希表和鹽。哈希用C#完成,哈希方法是sha256。這背後的邏輯是sha256(password+salt)
。C#sha256進入PHP
的輸入的例子:
password = 'rosnicka'
salt = 'zxwqTy+XjaY='
hash = '3jdt1+JL3MPmjYr2OoXdoUwNfuweuDCZa8/3g7SfsNg='
當我試圖在PHP
運行散列函數的這個輸出是 "1125ed47a7aa11bc1c54c841b5eb7a6e72aa8ad27e010e6e25baa5b2a86cffb3"
我只使用散列計算器得到相同的結果
我與他們聯繫以瞭解我做錯了什麼。他們告訴我,在數據庫中存儲散列的ASCII版本。我應該怎麼做才能在PHP中獲得相同的散列或者爲了將它們的散列轉換爲原始的sha256散列做什麼?
非常感謝!
C#的哈希值已經Base64編碼的(所以是鹽,因此它可能是Base64編碼被應用之前解碼),在PHP你有字節的十六進制表示。 Base64對PHP哈希結果進行編碼,如果它不匹配Base64對salt進行解碼,則附加字節,Base64對結果進行編碼。 –
@AlexK。是的,但沒有更多的呢? Base64爲您提供了比輸入更大的輸出,而在上面的例子中,期望的散列只有44個字符 - 與sha256散列中的64個字符相比。 – JimL
不,44個字符是合理的,Base64會更小 - 它的64個字符,因爲2個字符用於直觀地表示字符串中的每個字節,哈希長度是其中的一半。 –