欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shiro的散列算法

程序员文章站 2024-03-22 10:07:22
...

shiro最闪亮的四大特征:认证,权限,加密,会话管理

为了提高应用系统的安全性,这里主要关注shiro提供的密码服务模块;

1.加密工具类的熟悉

首先来个结构图,看看shiro提供了哪些加密工具类:
shiro的散列算法
加密算法分为三种 主要就是1 对称加密 2 不可逆加密 3 可逆加密
其中主要的就是不可逆加密 MD5 加密
package com.zc.pojo;

import org.apache.shiro.crypto.hash.Md5Hash;

public class Md5 {
public static void main(String[] args) {
//使用Md5加密算法定义
Md5Hash md5=new Md5Hash(“1111”);
System.out.println(“111=”+md5.toString());
//加盐
md5=new Md5Hash(“1111”,“sxt”);
System.out.println(“1111=”+md5.toString());
//迭代次数
md5=new Md5Hash(“1111”,“sxt”,2);
System.out.println(“1111=”+md5.toString());

}
}
// 第1种MD5加盐加密操作
Md5Hash newPassword = new Md5Hash(password, salt, 1);// 第三个参数 "1"的意思是循环加密多少次
System.out.println(newPassword.toString());
// 第2种MD5加盐加密操作
SimpleHash sh = new SimpleHash(“MD5”, password, salt, 1);// 第四个参数 "1"的意思是循环加密多少次
System.out.println(sh.toString());
不过我们平常是得把散列的加密方式配置到ini文件中,实际项目上我们不可能把用户的账号和密码写在ini配置文件中,而是通过数据库查询进行处理的,所以要用到自定义,其实就是加上数据库的操作而已。配置文件如下:shiro_hash.ini 注意:ini文件是以;开始的
Realm文件配置
****public class HashRealm extends AuthorizingRealm {

    @Override  
    public void setName(String name) {  
        super.setName("HashRealm");// 自定义一个名字  
    }  
      
    // 认证不关这块的事,先空着先  
    @Override  
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {  
        // TODO Auto-generated method stub  
        return null;  
    }  
  
    @Override  
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {  
          
        // 获取token里的账号  
        String username  = String.valueOf(token.getPrincipal());  
          
        // 假设这里是逻辑是从数据库获取用户信息不存在  
        if(StringUtils.isBlank(username) || "a".equals(username)) {  
            return null;// 返回一个空,就是没这个用户存在  
        }  
        // 盐  
        String salt = "jack";  
        String password = "4da71e0c7f2fa0ff8a25ecc4f5dab6d4";// 假设这个是数据库里查询出来的用户密码MD5加密后的  
        // 返回认证信息  
        return new SimpleAuthenticationInfo(username, password, ByteSource.Util.bytes(salt), this.getName());  
    }  
  
}****

利用加密算法加密数据

Md5Hash md5Hash = new Md5Hash(“dfvfh”);
//2.使用md5加密,再通过加盐的方式进一步对密码进行保护,该方式也有可能会被**
Md5Hash md5Hash1 = new Md5Hash(“dfvfh”, “mima”);
//3.使用md5加密,通过加盐方式加密后再次通过散列加密
Md5Hash md5Hash2 = new Md5Hash(“ds32”, “mima”, 2);
//4.使用SimpleHash加密
SimpleHash simpleHash = new SimpleHash(“md5”, “ds32”, “mima”, 2);

相关标签: shiro