目錄
密碼學如何提高密碼的安全性
密碼安全一般有密碼的儲存和傳輸類安全。
洩露渠道
儲存防禦
傳輸防禦
密碼學中的加密和雜湊是經常用到的,還有編碼和混淆這裡先涉及。
加密有對稱加密和不對稱加密兩種方式。
對稱加密
共享金鑰,加密和解密都是共享金鑰。常見的對稱加密演算法有des、3des、aes、rc5、rc6
使用場景:檔案系統加密,wi-fi保護訪問(wpa),資料庫加密
對稱加密的一大缺點是金鑰的管理與分配,換句話說,如何把金鑰傳送到需要解密你的訊息的人的手裡是一不對稱加密個問題。在傳送金鑰的過程中,金鑰有很大的風險會被黑客們攔截。現實中通常的做法是將對稱加密的金鑰
進行非對稱加密,然後傳送給需要它的人。
des
常見的公鑰加密演算法有 rsa,使用場景:tsl、ssh、vpn
rsa原理雜湊演算法
一種只能加密,不能解密的密碼學演算法,可以將任意長度的資訊轉換成一段固定長度的字串。
使用場景:
密碼的安全主要涉及到密碼的儲存和傳輸。
保證密碼在通訊傳輸中的安全,用https即可。
這裡主要聊一聊密碼的儲存安全。密碼明文儲存是非常危險的,在資料庫被盜,伺服器被攻擊或者開發管理者的洩露上都是容易輕易被獲取的,所以除了後端對密碼進行加密入庫外,前端也有必要進行加密。
前端進行hash加密
後端對加密後的密碼再次進行hash+salt入庫
隨機加鹽雜湊
沒有密碼
hash演算法是不可逆的演算法,我們無法通過加密後的密文推算出明文。但是我們經常用的hash演算法中的md5是很不安全的,比如md5反查的彩虹表( 對那些簡單且有規律的密碼是直接可以反推出來的。所以在加密的過程中,我們還需要注意
在雜湊演算法中,首選是 sha2 系列,如sha256。md5 由於用得太多,而且彩虹表實在過於氾濫,並不推薦使用。
可以使用crypto-js庫
// 加入使用者名稱可以防止相同密碼的情況
sha256(
sha265(sha265(password)) + sha265(username)
)// 後端加鹽
sha256(
sha256(username + sha256(password + salt)) + salt + sha256(username + salt)
)// 還可以在**中加入複雜的字串,防止資料庫中鹽被盜時,加固密碼破解的風險
sha256(
sha256(username + sha256(password + salt)) + salt + sha256(username + salt)+ 'abced@#4@%#$7'
)
除了加鹽加字串,還有更好的方式是隨機加鹽雜湊。之前的方法時鹽固定,加鹽的位置也固定。如果在儲存密碼的時候鹽隨機生成,並插入到原始密碼的隨機位置,那麼資料庫裡每條密碼記錄的鹽和加鹽位置都不同,黑客攻擊的成本就隨之增加了。
最好的方法:沒有密碼
總之,道高一尺,魔高一丈。提高密碼的安全性主要是提高黑客攻擊的成本,當攻擊成本遠超過利益本身,那我們的密碼就相對安全了。
web安全 之 sql注入防禦
1 mysql預編譯 推薦 mysqli new mysqli localhost root mraz if mysqli connect error 建立預編譯物件 sql select id,fdname,fdage from emp where id and fdage mysqli stmt...
web安全學習 web安全防禦
影響web安全的主要因素就是使用者輸入的不可控,這篇文章就從乙個巨集觀的角度來分析一下如何去保證乙個應用程式的安全。為了保證web安全,首先就是要分析應用程式中那些方面容易遭受到攻擊,然後根據分析結果在制定具體的安全方案。web應用程式的基本安全問題 所有使用者的輸入都是不可信的 致使應用程式實施大...
web安全 CSRF(防禦篇)
csrf防禦之驗證碼 目前,驗證碼被認為是對抗csrf攻擊最簡單有效的防禦措施。用到驗證碼就是在請求過程中強制使用者與應用進行互動,但是乙個站點 乙個好的產品要考慮到使用者的體驗,顯然如果在所有的操作上都加入驗證碼對使用者來說就很不友好。因此驗證碼只能是一種防禦csrf攻擊的輔助手段,並不能成為主要...