存在資料庫中的密碼如果是明文,一旦資料庫資料洩漏了,別人就可以拿著你的賬號密碼為所欲為。更何況有很多人在各個平台的使用者名稱密碼都是一致的。所以使用者的密碼,一定要加密儲存。
2.1、對稱加密,指的是需要對加密和解密使用相同金鑰的加密演算法。常見的對稱加密演算法有:des、3des、aes等。
2.2、非對稱加密,它需要兩個金鑰,乙個稱為公鑰(public key),乙個稱為私鑰(private key)。加密和解密使用兩個不同的金鑰。例如:甲生成一對金鑰,並將其中的一把作為公鑰向其他人公開,得到該公鑰的乙使用該金鑰對資訊進行加密後在傳送給甲,甲使用自己儲存的另一把私鑰,對加密後的資訊進行解密。常見的非對稱加密演算法有rsa、dsa等。
2.3、單向hash演算法,就是把任意長的訊息串轉化為固定長度的輸出串的一種演算法。一般使用者資訊摘要。常見的有md5、sha、mac等。
2.4、加鹽hash演算法,鹽(salt),在密碼學中,是指在雜湊之前將雜湊內容(例如:密碼)的任意固定位置插入特定的字串。這個在雜湊中加入字串的方式稱為「加鹽」。其作用是讓加鹽後的雜湊結果和沒有加鹽的結果不相同,在不同的應用情景中,這個處理可以增加額外的安全性。
3.1、可逆的演算法不要選,會增加密碼洩漏的風險。
3.2、md5不要選,md5並不是乙個加密演算法,而是乙個資訊摘要演算法,可通過彩虹表進行破解,且相同明文加密後的密文是一致的,一旦破解出來乙個,其餘相同的也都知道了。
3.3、不要加固定的鹽,比如說使用者名稱,郵箱等,如果資料庫被攻破了,鹽會被拿到。一旦鹽洩漏,根據鹽重新建立彩虹表可以進行破解。
所以用於密碼加密的演算法最好是,不可逆的,且使用隨機鹽,常用做密碼加密的演算法有bcrypt、scrypt。
4.1、匯入依賴
org.mindrot4.2、對密碼進行加密jbcrypt
0.4
@override4.3、認證過濾器,修改密碼校驗方式@transactional(rollbackfor = exception.class
)
public
userdto create(userdto userdto)
4.4、建立兩個使用者,並使用相同的密碼123456,檢視資料庫中儲存的密碼是不一致的
4.5、測試認證功能
這樣,我們資料庫中的密碼就安全多了。
5.1、匯入依賴
com.lambdaworks5.2、對密碼進行加密scrypt
1.4.0
userdto.setpassword(scryptutil.scrypt(userdto.getpassword(),2 << 14,8,1));5.3、認證過濾器,修改密碼校驗方式
效果與使用bcrypt類似,該演算法唯一的缺點就是慢。
六 密碼加密
一 繼承org.apache.shiro.realm.activedirectory.activedirectoryrealm public class shirorealm extends authorizingrealm 二 重寫protected authenticationinfo doge...
API介面安全 加密
客戶端和服務端設定乙個公共金鑰 key www.imdupeng.cn 假設介面需要 a b c三個引數 例如你的api位址是 需要接受的引數有a,b,c三個,那麼可以加乙個驗證token。例如 token sha1 a.b.c.key 然後訪問使用 api.php接收到a,b,c,token引數後...
密碼安全與加密 提公升千百倍的密碼安全
最近幾年太多密碼洩露問題了。出問題原因有幾個 1 明文儲存密碼。這個以csdn為首,居然超過10年都這樣,偶實在無話可說。2 只對密碼加密,只要密碼相同,無論用什麼加密方式 對稱,非對稱,多種加密方式混用 加密後的內容都一樣。這種方式的問題在於太多的使用者用的密碼相同了,只要破解乙個密碼,一批使用者...