題主你可以使用 md5 或者 sha1 進行初步處理,但為了更加安全,請你同時加上兩個 salt,一個靜態(tài) salt,一個動態(tài)的 salt。以 md5 為例:\x0d\x0a假設通過 POST 傳來的密碼為 $_POST['password'],在存入 DB 前先進行如下的操作:\x0d\x0a$password = hash('md5', $_POST['password'].$staticSalt.$dynamicSalt);\x0d\x0a\x0d\x0a為了保證動態(tài) salt 的唯一性,可以這樣操作:\x0d\x0a$dynamicSalt = hash('md5', microtime());\x0d\x0a\x0d\x0a對于動態(tài)的 salt 可以與生成的密碼一起保存在 DB 中,而靜態(tài) salt 則可以直接放在類文件中(例如定義為一個靜態(tài)屬性即可)。\x0d\x0a首先謝謝題主采納了我的答案,但是我之前的回答并不是最佳答案,之所以有此加密的想法源于自己所讀的源碼可能比較老,所以并沒使用上較新版本的加密方法,例如 bcrypt等。\x0d\x0a此外,第二點,感謝評論中幾位前輩的提點,已經明白設置靜態(tài) salt 的意義并不大,生成一個較長的動態(tài) salt 已然可以解決問題。\x0d\x0a\x0d\x0aLZ應該采用加鹽HASH。\x0d\x0a如何“腌制”密碼呢?\x0d\x0a=_,=\x0d\x0a正確的格式應該是,用戶password+動態(tài)的salt\x0d\x0a動態(tài)的salt不能像2L所說的,使用microtime,因為時間在某些情況下不夠隨機,而且是可能被猜解的。\x0d\x0a這里推薦一個我用的加鹽HASH\x0d\x0a$salt=base64_encode(mcrypt_create_iv(32,MCRYPT_DEV_RANDOM));\x0d\x0a$password=sha1($register_password.$salt);\x0d\x0a\x0d\x0a解釋:\x0d\x0a首先使用mcrypt,產生電腦隨機生成的,專門用戶加密的隨機數函數。\x0d\x0a第二步,把得到的隨機數通過base64加密,使其變長并且不利于猜解。\x0d\x0a第三步,把得出的鹽拼接到密碼的后面,再對其使用sha1進行哈希\x0d\x0a再把password存入到用戶的數據庫。\x0d\x0aPS:為何不用靜態(tài)的salt?沒有必要,使用一個動態(tài)隨機足夠長的鹽足矣。\x0d\x0a為何不用MD5?因為長度不夠。\x0d\x0a為何沒有使用多次HASH?因為這樣反而容易發(fā)生碰撞。\x0d\x0aHASH好之后怎么使用“腌制”好的密碼?\x0d\x0a用戶注冊-提交密碼-產生salt-腌制好的密碼存入數據庫-salt存入數據庫。\x0d\x0a用戶登錄-提交密碼-調用salt接到提交密碼的后面-進行HASH-調用之前注冊腌制好的密碼-對比HASH值是否和這個密碼相同
站在用戶的角度思考問題,與客戶深入溝通,找到密山網站設計與密山網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站設計、做網站、企業(yè)官網、英文網站、手機端網站、網站推廣、申請域名、網站空間、企業(yè)郵箱。業(yè)務覆蓋密山地區(qū)。
首先來說,目前常用的方式有兩種,
瀏覽器端安全控件,淘寶、銀行等均采用該方式,優(yōu)點是安全系數高,缺點是投資較大;
使用ssl方式完成登陸,安全系數一般,投資較低(需要申請ssl證書)
至于使用js在post前加密從原理上來說是根本沒有意義的,就像你說的,js是明文的,所以破解并不難。
如果你要開發(fā)的應用對安全性有要求,建議采用ssl方式即可,如果對安全性要求極高,選擇安全控件。
事實上,對于80%的網站,登錄信息安全問題并不重要,尤其是抓包導致泄露的幾率極低。因為抓包這個事其實技術門檻還是很高的,如果盜取的賬號沒有極高的價值很少有人會去做。就像微博,QQ等,服務商也只是提供了各種密保,而沒有針對賬號提交過程提供太大的保護。
99%的賬號丟失問題來自于木馬,通過監(jiān)控鍵盤事件完成盜取,而這種行為js根本無能為力。甚至前面說過的兩種加密方式也同樣。
對于普通的網站,通常的手法就是要求認證用戶的安全郵箱,當密碼丟失的時候可以通過安全郵箱重置密碼,這就足夠了。不建議嘗試額外的手機找回密碼、身份證綁定之類的功能,除非您的網站已經足夠強大,否則有一點安全知識的人都不會在莫名其妙的網站上輸入自己的手機號和身份證的。同理,就算你提供了安全控件,很多人可能也不會選擇安裝,因為你沒辦法證明自己提供的安全控件是安全的。
不要把抓包想的太容易哦,誰知道用戶什么時候會登錄,從什么地方過來,發(fā)到哪里,總不能24小時盯著吧?費這么大勁偷到了,連幾千塊錢都不值,他不是白費力氣吧?能用這種方式盜取信息的人,你覺得他會對萬把塊的小錢感興趣嗎?除非是有人花錢請他對你的網站惡意攻擊。也簡單,平時注意備份就好了。和洪水地震的幾率差不多。
如果要加密的話,只能用js版md5加密密碼,用戶名估計還是得明碼傳送。因為md5算法是不可逆的,你后臺無法對已用md5加密的字符串進行解密,除非用暴力破解。
如果真的對安全性要求那么高,不如直接對appache設置為https的安全鏈接,類似網銀的做法。這樣所有的post內容在發(fā)送時都是加密的,到后臺以后會自動解密。
不過這種方法速度上會比一般的http慢。
解決方法很多!如果要加密的話,只能用js版md5加密密碼,用戶名估計還是得明碼傳送。因為md5算法是不可逆的,你后臺無法對已用md5加密的字符串進行解密,除非用暴力破解。如果真的對安全性要求那么高,不如直接對appache設置為https的安全鏈接,類似網銀的做法。這樣所有的post內容在發(fā)送時都是加密的,到后臺以后會自動解密。不過這種方法速度上會比一般的http慢。