shiro封裝了很多加密的手段,這一篇來介紹其中的Base64加密,與現在比較流行的md5加密
在shiro的核心包裏封裝了很多加密的算法:
這些加密方法都是封裝好的,可以直接用;
/**
* Base64加密
* @param str
* @return
*/
public static String encBase64(String str) {
return Base64.encodeToString(str.getBytes());
}
/**
* Base64解密
* @param str
* @return
*/
public static String decBase64(String str) {
return Base64.decodeToString(str);
}
/**
* md5加密
* @param str
* @return
*/
public static String md5(String str,String salt) {
return new Md5Hash(str, salt).toString();
}
public static void main(String[] args) {
String password="1234";
String salt="java";
System.out.println(CryptographyUtil.encBase64(password));
System.out.println(CryptographyUtil.decBase64(CryptographyUtil.encBase64(password)));
System.out.println(CryptographyUtil.md5(password,salt));
}
下面來說一下md5加密,shiro提供了加密的3種方式:
第一種時直接給一個String加密,但是這種方法,現在可以通過碰撞,以及MD5庫,有些是可以解密的,
第二種時在加密時加入鹽,增加了加密的複雜度,這樣在不提供鹽的情況下,理論上這種md5加密時不可逆的。
第三種是在加鹽的基礎上,又加入了一個進行散列的次數,這樣又大大增加了加密的複雜度,使加密更安全,但是缺點就是加密的時間有點長。
一般我們採用MD5加密的時候,當用戶註冊用戶後,密碼隨之加密存到數據庫裏,即使有一天數據庫的密碼泄露了,數據庫裏的密碼仍然時加密不可破解的,在登錄時,用戶輸入的密碼,在經過加密,後與數據庫裏的是否一致來判斷密碼是否正確,因爲兩次加密後的密碼肯定時一樣的。