我知道這是一個話題,但我想具體詢問我的應用程序。還值得一提的是,我對PHP相當陌生,並且一直在學習。PHP CRUD應用程序,密碼擁有
所以我寫了一個看似基本的CRUD應用程序,使用PHP和MySQL。我所有的代碼都使用mysqli_ *,並且儘可能地使用最佳實踐。我所做的一件事是,大多數人都皺眉,用MD5
來密碼。我認爲我理解使用SHA1的目的,因爲它應該比MD5需要更多的週期來散列/散開,鹽應該防止使用彩虹表。 bcrypt
是一種較新的散列算法,需要比SHA1更多的CPU週期。至少我認爲這就是一切。
這是我的理解,你散列/鹽密碼,所以如果有人獲得訪問您的數據庫中的用戶表,他們沒有看到你的用戶密碼在純文本。對?
由於我的應用程序是一個基本的CRUD系統(針對小企業的庫存跟蹤,具有多個用戶和可定義的位置),如果有人要訪問我的用戶表並查看這些MD5哈希,他們可以很容易地將其反轉爲可讀密碼並登錄到我的系統中。但是,如果他們可以訪問我的數據庫並查看我的用戶表,那麼他們可以輕鬆地查看我的庫存表,產品表和數據庫中的所有其他表,無需登錄到應用程序即可獲取數據。目前,我的Web服務器有PHPMyAdmin和Webmin(帶有MySQL模塊),所以如果他們能夠訪問其中的任何一個,他們可以看到數據庫中的數據,而不用擔心登錄系統本身。
考慮到這一點,在這種情況下最好的做法是什麼?我的網絡服務器已經具有典型的安全性,比如阻止root SSH訪問,iptables等,但就密碼散列而言,我是否應該打擾升級我的代碼以使用bcrypt
而不是MD5
?是否升級到使用bcyrpt
從MD5
一個簡單的過程,或者我將不得不重新設計我的登錄系統是如何工作的?
謝謝!
這看起來並不困難,但是'crypt()'與'bcrypt()'相同嗎?相似之處?對於它的價值,我使用PHP-FPM 5.4.x. 另外,爲什麼downvote? – dhorn
Downvote不是來自我,所以我不知道。實際上,PHP在5.5之前沒有bcrypt實現,其中引入了'password_hash()'。但是你可以使用帶'crypt'的'blowfish'編碼算法。提供的詳細信息@ PHP.NET – Eternal1
像這樣使用的crypt函數將計算無信息的DES散列,並且對散列密碼非常不安全。 – martinstoeckli