我正在開發基於Web和客戶端應用程序的系統;客戶端在PHP和Http請求的幫助下在服務器中完成所有數據庫查詢。 Web系統是用PHP/Mysql開發的,安裝在PC上的客戶端應用程序是用C#開發的。加密:爲密碼做一個更強的散列
好!在一個階段,客戶端必須通過登錄來識別用戶,這看起來像一個簡單的任務,但服務器IP可以通過應用程序配置部分進行更改。考慮到這一點,任何邪惡的人都可以通過輸入惡意服務器的IP地址進行網絡釣魚,然後竊取密碼,事情是,我不會以文本/純文本的形式從客戶端發送密碼。
現在我正在使用md5進行密碼散列(沒有鹽,只是純散列),我只用它來存儲數據庫的密碼。
閱讀了一下後,我意識到人們不推薦使用md5了,而是使用sha256或更高版本,我正在考慮遷移到更好的散列算法並創建自己的鹽。
據我所知鹽只是一個隨機的一段文字添加到哈希,但我不認爲這是最好的選擇,所以我在想的東西:
由於哈希值是基於對於十六進制值,小寫字母和固定長度(32,64等等,取決於算法),我可以使用加載在列表(數組)中的固定值的總和來對每個散列字符的ASCII代碼進行處理,例如:
我:每個字母ABCD
ASCII碼:
一個 - > 97
乙 - > 98
Ç - > 99
d - > 100
然後我總結列表的固定值(具有32的長度/ 64個根據整數)這樣
一個 - > 97 + 5 = 102 =>˚F
乙 - > 98 + 2 = 100 => d
Ç - > 99 + 7 = 106 =>Ĵ
d - > 100 + 3 = 103 =>克
所以結果將是:FDJE它取代ABCD的散列。
我不知道它有多安全,黑客決定我使用的技術有多困難,結果是結果與散列長度相同,並且很難確定鹽,所以如果出於歷史上的任何原因,黑客使用彩虹桌並捕獲可能的結果,那將是錯誤的。你怎麼看待這件事?
謝謝...
請不要設計新的安全基元,至少不要自己先欺騙自己是專家。 –
讓我感到緊張的是這樣的:「[...]客戶端在PHP和Http請求的幫助下在服務器上完成所有數據庫查詢。」您能詳細說明一下嗎?您的客戶意味着什麼使數據庫查詢?它是否生成它們並將它們發送到數據庫以供執行? – Gumbo
[不要推出自己的加密](http://security.stackexchange.com/q/18197/20774)。使用scrypt,bcrypt或pbkdf2。 – 1615903