憑證匹配器-普通加密
- (1)加密
將明文加密成密文保存,賬號保存在資料庫中是需要加密碼的 - (2)加密演算法
http://www.ttmd5.com/list.php - (3)實作
》1 對資料庫密碼進行md5加密
使用mysql的md5函式對密碼進行加密,然后直接修改資料庫的用戶密碼
》2 在applicationContext-shiro.xml,添加加密認證配置
public class MD5Utils {
//
public static String stringToMD5(String plainText) {//參1 明文
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());//對明文的位元組進行摘要
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("沒有這個md5演算法!");
}
//16或者32
String md5code = new BigInteger(1, secretBytes).toString(16);
//補0 一個位元組轉兩位的16進制
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}
@Test
publi
c void stringToMD5() {
String result = MD5Utils.stringToMD5("123");
System.out.println(result);
//md5(123)= 202cb962ac59075b964b07152d234b70
//202cb962ac59075b964b07152d234b70
}
//shiro也集成常用的加密的演算法md5,sha-1
@Test
public void test02() {
Md5Hash md5Hash = new Md5Hash("123");//參1 傳入明文
System.out.println(md5Hash.toString());
//202cb962ac59075b964b07152d234b70
}
Shiro-普通加密
update pe_user set password=md5('123') where email= 'lw@export.com';
<!--配置一個密碼的匹配器-->
<!-- 123 是用戶提交過來的, 密碼的匹配器 得到密文1,與資料庫的密碼2-->
<!--創建憑證匹配器-->
<bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
<!--指定加密演算法-->
<property name="hashAlgorithmName" value="md5"/>
</bean>
<!--2.2.創建Realm-->
<bean id="authRealm" class="com.wzx.web.shiro.AuthRealm">
<property name="credentialsMatcher" ref="credentialsMatcher"/>
</bean>
憑證匹配器-加鹽加密
- (1)為什么要加鹽
如果只是單純使用md5或sha1進行加密,容易被人利用"彩虹表"撞庫來破解密碼,導致密碼不安全!這時可以進行加鹽加密來解決,
演示: 加鹽 - (2)shiro加鹽加密
1)撰寫代碼對密碼加鹽加密
2)撰寫自定義憑證匹配器
3)在applicationContext-shiro.xml,添加自定義憑證匹配器
<!--使用自己定義的匹配器-->
<bean id="credentialsMatcher2" class="com.wzx.web.utils.CustomCredentialsMatcher">
</bean>
<!--2.2.創建Realm-->
<bean id="authRealm" class="com.wzx.web.shiro.AuthRealm">
<property name="credentialsMatcher" ref="credentialsMatcher2"/>
</bean>
修復添加用戶時對密碼加鹽加密
- (1)添加用戶時候,需要對用戶輸入的密碼加密、加鹽,這樣就可以使用添加的用戶登陸了,
//對密碼加鹽加密
if(user.getPassword()!=null) {
user.setPassword(new Md5Hash(user.getPassword(),user.getEmail()).toString());
}
UserServiceImpl
@Override
public void saveUser(User user) {
String uuid= UUID.randomUUID().toString();
user.setUserId(uuid);
//原來保存用戶使用的密碼是明文,現在需要對它進行加密
if(user.getPassword()!=null){
Md5Hash md5Hash = new Md5Hash(user.getPassword(),user.getEmail());//參1 明文 參2 鹽
user.setPassword(md5Hash.toString());
}
l.info("saveUser "+user);
iUserDao.save(user);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/209126.html
標籤:其他
上一篇:測驗題15(答案詳析)
下一篇:Java執行緒中的賣火車票問題
