shiro安全管理框架之Cryptography
阿新 • • 發佈:2018-12-20
1.Shiro Cryptography
1.1 shiro提供的加密模組
- Cryptography:
加密,保護資料的安全性,如密碼加密儲存到資料庫,而不是明文儲存;
在涉及到密碼儲存問題上,應該加密/生成密碼摘要儲存,而不是儲存明文密碼。比如之前的600w csdn賬號洩露對使用者可能造成很大損失,因此應加密/生成不可逆的摘要方式儲存。
- Shiro提供了base64和16進位制字串編碼/解碼的API支援,方便一些編碼解碼操作。Shiro內部的一些資料的儲存/表示都使用了base64和16進位制字串。
- 雜湊演算法一般用於生成資料的摘要資訊,是一種不可逆的演算法,一般適合儲存密碼之類的資料,常見的雜湊演算法如
MD5、SHA等。一般進行雜湊時最好提供一個salt(鹽),比如加密密碼“admin”,產生的雜湊值是“21232f297a57a5a743894a0e4a801fc3”,可以到一些md5解密網站很容易的通過雜湊值得到密碼“admin”,即如果直接對密碼進行雜湊相對來說破解更容易,此時我們可以加一些只有系統知道的干擾資料,如使用者名稱和ID(即鹽);這樣雜湊的物件是“密碼+使用者名稱+ID”,這樣生成的雜湊值相對來說更難破解。- shiro-root-1.3.2/shiro-root-1.3.2/core/target/site/apidocs/index.html
1.3 加密與解密
1.3.1 Base64加密與解密
- Base64是一種加料置位加密法,那為什麼叫base64呢?因為無論明文是什麼(比如漢字,特殊符號等),加密後的密文都只會變成字母A-Z、a-z和0-9 和+和/這64個字元.
- Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一
//1. Base64加密/解密 //Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一 @Test public void base64() throws Exception { // 加密 String base64Encode = Base64.encodeToString("123456".getBytes()); System.out.println("加密:" + base64Encode); // 解密 String base64Decode = Base64.decodeToString(base64Encode); System.out.println("解密:" + base64Decode); }
1.3.2 hex加密與解密
//2. Hex 加密解密
@Test
public void hex() throws Exception {
// 加密
String hexEncode = Hex.encodeToString("aaa".getBytes());
System.out.println("加密:" + hexEncode);
// 解密
byte[] hexDecode = Hex.decode(hexEncode);
System.out.println("解密:" + new String(hexDecode));
}