A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



shiro-realm.ini
需要在shiro-realm.ini配置realm注入到securityManager
[plain] view plain copy print?

  • [main]  
  • #自定义realm  
  • customRealm=liuxun.test.shiro.realm.CustomRealm  
  • #将realm设置到SecurityManager,相当于Spring中的注入  
  • securityManager.realms=$customRealm  
[plain] view plain copy print?

  • [main]  
  • #自定义realm  
  • customRealm=liuxun.test.shiro.realm.CustomRealm  
  • #将realm设置到SecurityManager,相当于Spring中的注入  
  • securityManager.realms=$customRealm  
[main]#自定义realmcustomRealm=liuxun.test.shiro.realm.CustomRealm#将realm设置到SecurityManager,相当于Spring中的注入securityManager.realms=$customRealm

测试代码
测试代码同入门程序,将ini的地址修改为shiro-realm.ini
分别模拟账号不存在、密码错误、账号和密码正确进行测试

散列算法
散列算法一般用于生成一段文本的摘要信息,散列算法不可逆,将内容可以生成摘要,无法将摘要转成原始内容。散列算法常用于对密码进行散列,常用的散列算法有MD5、SHA。
一般散列算法需要提供一个salt(盐)与原始内容生成摘要信息,这样做的目的是为了安全性,比如:111111的md5值是:96e79218965eb72c92a549dd5a330112,拿着“96e79218965eb72c92a549dd5a330112”去md5破解网站很容易进行破解,如果要是对111111和salt(盐,一个随机数)进行散列,这样虽然密码都是111111加不同的盐会生成不同的散列值。

md5散列测试程序
[java] view plain copy print?
package liuxun.test.shiro.authentication;  
  
import org.apache.shiro.crypto.hash.Md5Hash;  
import org.apache.shiro.crypto.hash.SimpleHash;  
  
public class MD5Test {  
    public static void main(String[] args) {  
        //原始密码  
        String source = "123456";  
        //盐  
        String salt = "qwerty";  
        //散列次数  
        int hashIterations = 2;  
        //上边散列1次:48474f975022f960bc2afbe49be581e8  
        //上边散列2次:13f79dafcbbedc313273e2b891ac84d3  
         
        //构造方法中:  
        //第一个参数:明文,原始密码  
        //第二个参数:盐,通过使用随机字符串  
        //第三个参数:散列的次数,比如散列两次,相当于md5(md5(''))  
        Md5Hash md5Hash = new Md5Hash(source, salt, hashIterations);  
         
        String password_md5 = md5Hash.toString();  
        System.out.println(password_md5);  
         
        //使用后SimpleHash  
        //第一个参数:散列算法  
        SimpleHash simpleHash = new SimpleHash("md5", source, salt, hashIterations);  
        System.out.println(simpleHash.toString());  
    }  
}
[java] view plain copy print?

  • package liuxun.test.shiro.authentication;  
  •   
  • import org.apache.shiro.crypto.hash.Md5Hash;  
  • import org.apache.shiro.crypto.hash.SimpleHash;  
  •   
  • public class MD5Test {  
  •     public static void main(String[] args) {  
  •         //原始密码  
  •         String source = "123456";  
  •         //盐  
  •         String salt = "qwerty";  
  •         //散列次数  
  •         int hashIterations = 2;  
  •         //上边散列1次:48474f975022f960bc2afbe49be581e8  
  •         //上边散列2次:13f79dafcbbedc313273e2b891ac84d3  
  •          
  •         //构造方法中:  
  •         //第一个参数:明文,原始密码  
  •         //第二个参数:盐,通过使用随机字符串  
  •         //第三个参数:散列的次数,比如散列两次,相当于md5(md5(''))  
  •         Md5Hash md5Hash = new Md5Hash(source, salt, hashIterations);  
  •          
  •         String password_md5 = md5Hash.toString();  
  •         System.out.println(password_md5);  
  •          
  •         //使用后SimpleHash  
  •         //第一个参数:散列算法  
  •         SimpleHash simpleHash = new SimpleHash("md5", source, salt, hashIterations);  
  •         System.out.println(simpleHash.toString());  
  •     }  
  • }  
建议对MD5进行散列时加salt(盐),相当于对原始密码+盐进行散列
正常使用时散列算法:
在程序中对"原始密码+盐"进行散列,将散列值存储到数据库中,并且还要将盐存储在数据库中,如果进行密码比对时,使用相同方法,将原始密码+盐进行散列,进行比对。

点击下方标题查看相关学习资料

2 个回复

倒序浏览
666666666看看
回复 使用道具 举报
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马