2017-08-25 75 views
-1

我在Eclipse Java中使用Tomcat爲我的Web應用程序執行了登錄頁面,並且它正在運行。我也連接到Oracle數據庫。現在我想哈希我的密碼,使我的應用程序比較通過鍵盤引入的密碼的哈希碼和數據庫中密碼的代碼(如果哈希代碼相同,則密碼正確)。我用Java編寫了一些用於散列密碼的代碼。在數據庫中散列密碼

你能幫我提一些關於如何在數據庫中散列代碼的方法嗎?我怎樣才能存儲散列的密碼?

+0

您可以先開始展示您到目前爲止的內容。除此之外,密碼是一個字符串,哈希也是一個,那麼存儲哈希而不是純字符串有什麼問題?有一件事你應該考慮在你的哈希(不直接與你的問題相關):添加一個靜態和動態的鹽來提高哈希的安全性。 – Thomas

+2

不幸的是,你的問題歸結爲「有人請幫助我」。但是我們並不認爲這個請求在本網站的範圍內是* questions *。請仔細閱讀[this](https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question)來理解爲什麼是這樣。然後考慮刪除這個問題,並在這個社區的範圍內提出一個新的,更精確的問題。或者,您可以返工並改進此問題。謝謝! – GhostCat

+0

您是否使用J2EE身份驗證? –

回答

0

您可以將散列的密碼作爲varchar列存儲在數據庫中。

+0

這看起來像一個半熟的評論比答案。 – GhostCat

+0

@GhostCat:對於通用問題,沒有太多具體的答案。該應用程序需要將密碼存儲在數據庫中(如果Dora願意實施,則需要鹽)。的確,問題很廣泛,我們不知道真正困擾作者的是什麼.. – gusto2

+0

@slim BCrypt哈希示例:'$ 2a $ 04 $ ikuprq9tq7Kd2x3yHrdJ8uHd8Vr5EOfHKEa2Zazg/52iVn2fwd5M'。這不是一個整數:它是一個'$',接着是版本'2a',後面跟着分隔符'$',接着是循環'04'的數量,後面跟着分隔符'$',後面跟着散列。我會強烈地考慮使用這個字符串,而不是試圖做一些它。 –

1

典型的哈希算法返回一個字節數組。例如,Java的MessageDigest

byte[] digest = messageDigest.digest(); 

不管你喜歡,你都可以存儲這個。你也將需要存儲:

  • 鹽,如果使用的話(你應該)
  • A「版本號」,以確定您所使用的哈希算法。
    • 這是如此,如果有一天你改變算法,你知道哪一個 舊的條目使用。

你可以有三列,hash varbinarysalt varbinaryversion integer

然而這是相當常見的所有三種編碼成單一的varchar:

  • 2字符的版本(一個十六進制數)
  • 固定數目的鹽字符(十六進制或BASE64的 - 寬取決於你的算法,將與版本而異)
  • 的哈希固定數目的字符(十六進制或Base64)

編碼爲可打印的ASCII字符使得它便於目測數據,以您選擇的協議進行傳輸等。