2012-09-13 127 views
1

我將密碼和用戶登錄一起散列,並將其作爲VARBINARY長度保存在數據庫中。訪問散列密碼

現在,我正在嘗試在asp.net中構建登錄頁面。我怎樣才能從數據庫中獲取密碼值,並將其與用戶提供的密碼值進行比較?我使用SqlDataReader來讀取數據庫。

問候,

巴爾託什

+0

有關散列與加密的信息:[散列密碼和加密它之間的區別](http://stackoverflow.com/questions/326699/difference-between-hashing-a-password-and-encrypting-it?rq = 1) –

+1

不要忘記添加[salt](http://en.wikipedia.org/wiki/Salt_(cryptography)) –

回答

0

你不unhash數據庫的密碼,並將其與輸入。

您對輸入進行散列並將其與密碼進行比較。如果兩個哈希匹配,則認爲它是相同的密碼。

從技術上講,這取決於你的哈希函數,它可能不是,因爲用戶可以有隨機進入該散列爲相同的值作爲真正密碼的密碼,但是這是迂腐;)

+0

這就是我想要做的。但是,如何將包含我散列密碼的閱讀器[「密碼」]轉換爲字節[]以進行比較? – Bartosz

+0

(Byte [])reader [「usrPassword」]我在找。無論如何,謝謝 – Bartosz

0

你創建一個散列(用與創建初始散列相同的算法),在用戶輸入並在db中搜索密碼的情況下(如果散列與初始散列相同) - >是的,它是相同的密碼

散列的想法是有一個不可退回的功能 - >你可以檢查它是否相同,但你永遠不能重建輸入數據。

+0

這就是我想要做的。但是,如何將包含我散列密碼的閱讀器[「密碼」]轉換爲字節[]以進行比較? – Bartosz

1

您需要將這些文件存儲在包含帶有用戶名的列的表格中,以明文形式顯示,以便您可以根據嘗試登錄的用戶獲取哈希值。並將散列輸入與散列存儲的輸入進行比較。

+0

我確實有明文保存在數據庫中的用戶名。其採購散列密碼並將其轉換爲字節[],以供比較,我無法做到。 – Bartosz

0

作爲RB。說,你檢索從數據庫傳遞的散列。然後你使用用戶提供的密碼,並使用之前使用的哈希算法對其進行哈希處理。如果數據庫中的散列碼與用戶輸入的密碼的散列碼相匹配,那麼密碼是正確的。

+0

這就是我想要做的。但是,如何將包含我散列密碼的閱讀器[「密碼」]轉換爲字節[]以進行比較? – Bartosz

+0

看看類似的問題。有代碼來編寫散列字節。 http://stackoverflow.com/questions/2687196/asp-net-membership-c-sharp-how-to-compare-existing-password-hash – tranceporter