1. 程式人生 > >shiro安全管理框架之Cryptography

shiro安全管理框架之Cryptography

1.Shiro Cryptography

1.1 shiro提供的加密模組

  • Cryptography
  • 加密,保護資料的安全性,如密碼加密儲存到資料庫,而不是明文儲存;

    在涉及到密碼儲存問題上,應該加密/生成密碼摘要儲存,而不是儲存明文密碼。比如之前的600w csdn賬號洩露對使用者可能造成很大損失,因此應加密/生成不可逆的摘要方式儲存。

  • Shiro提供了base6416進位制字串編碼/解碼的API支援,方便一些編碼解碼操作。Shiro內部的一些資料的儲存/表示都使用了base6416進位制字串。
  • 雜湊演算法一般用於生成資料的摘要資訊,是一種不可逆的演算法,一般適合儲存密碼之類的資料,常見的雜湊演算法如
    MD5SHA等。一般進行雜湊時最好提供一個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-Za-z0-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));
	}