這是一個非常寬泛的問題,但希望有一些高層次的細節可以幫助你。
首先,正如你所說,你通常不應該自己實現一個安全的散列函數,因爲犯錯很容易導致安全漏洞。加密哈希,例如在SHA-2中以各種位強度提供的,是將輸入字節轉換爲指定長度的輸出的單向加密過程。假設有正確的算法,該輸出不能直接轉換回輸入。
在特定的SHA-2算法討論,您可以用維基百科頁面開始:https://en.wikipedia.org/wiki/SHA-2
爲了設計自己的算法,你會想考慮下列因素(如SHA-2等散列算法做,維基百科摘錄):
- 它是確定性的,因此同樣的消息總是導致相同的哈希
- 它是快速計算哈希值對於任何給定的消息
- 是不可行的產生從它的哈希值的消息,除了通過嘗試所有可能的消息
- 一個小改動的消息應該改變的哈希值如此廣泛,新的哈希值會出現與舊的哈希值不相關
- 它是不可行的找到具有相同散列值的兩個不同消息
另外,用於特定的密碼哈希:
- 逆着「快速」上述考慮,密碼散列算法通常選擇n在硬件中較慢並且更難實現(例如, scrypt),以減少在密碼和鹽已知時強制密碼的能力。通常這是通過執行大約1000多輪SHA-2來完成的。
最後,在哈希算法本身之外,確保密碼哈希值是很重要的。此處的鹽指的是在散列之前修改密碼(例如通過將密碼加前綴),其中隨機生成的鹽值也與散列一起存儲。這可以防止密碼哈希的現有或單個字典被用於數據庫中的所有哈希,如果它被破壞(即它迫使攻擊者單獨攻擊每個哈希)。
這太寬泛了。請求代碼示例和有關散列等主題的教程太多了。你需要什麼特別的幫助? – Carcigenicate
https://en.wikipedia.org/wiki/Cryptographic_hash_function – nicovank
我知道這是一個廣泛的問題,我並不是很難。只需說明密碼的不同之處在於將數據散列到地圖中。我沒有特別尋找任何可以幫助我的項目的信息。 – HoldenDinerman