MD5加密详解

MD5加密详解MD5加密详解加密过程:密码:123456(明文形式)—–>加密后49ba59abbe56e0571.密码在请求提交后到达控制器2.到达控制后通过加密规则,转换成密文3.在经过DAO查询与数据库中已经存在的密文密码比对是否一直,一致,则放行。用户注册密码时是加密存储的用户修改密码时,也需要进行加密存储加密规则:加密规则可以自定义,在项目中通常使用BASE64和MD5,本文使用的加密规则就是MD5,BASE64:可反编码的编码方式​


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

MD5加密详解

加密过程:

密码:123456 (明文形式)—–>加密后 49ba59abbe56e057

1.密码在请求提交后到达控制器

2.到达控制后通过加密规则,转换成密文

3.在经过DAO查询与数据库中已经存在的密文密码比对是否一直,一致,则放行。

  • 用户注册密码时是加密存储的

  • 用户修改密码时,也需要进行加密存储

加密规则:


  • 加密规则可以自定义,在项目中通常使用BASE64和MD5,本文使用的加密规则就是MD5,

  • BASE64: 可反编码的编码方式

    ​ 明文—密文

    ​ 密文–明文

  • MD5:不可逆的编码方式 (非对称)

    明文—-密文

  • 如果数据库用户的密码储存的密文,Shiro如何完成验证?

  • 使用Shiro提供的加密功能,对输入的密码进行加密后在进行确认。

    Shiro使用加密认证

    配置matcher

    @Configuration
    public class ShiroConfig { 
         
    
        //...
        @Bean
        public HashedCredentialsMatcher getHashedCredentialsMatcher(){ 
         
            HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();
            //matcher就是用来指定加密规则
            //加密方式
            matcher.setHashAlgorithmName("md5");
            //hash次数
            matcher.setHashIterations(1);	//此处的循环次数要与用户注册是密码加密次数一致
            return matcher;
        }
    
        //自定义Realm
        @Bean
        public MyRealm getMyRealm( HashedCredentialsMatcher matcher ){ 
         
            MyRealm myRealm = new MyRealm();
            myRealm.setCredentialsMatcher(matcher);
            return myRealm;
        }
    
    	//...
    }
    

    用户密码加密处理

    • UserComtroller

      @Controller
      @RequestMapping("user")
      public class UserController { 
             
      
          @Resource
          private UserServiceImpl userService;
      
      
      
          @RequestMapping("/regist")
          public String regist(String userName,String userPwd) { 
             
              System.out.println("------注册");
      
              //注册的时候要对密码进行加密存储
              Md5Hash md5Hash = new Md5Hash(userPwd);
              System.out.println("--->>>"+ md5Hash.toHex());
      
              //加盐加密
              int num = new Random().nextInt(90000)+10000;   //10000—99999
              String salt = num+"";
              Md5Hash md5Hash2 = new Md5Hash(userPwd,salt);
              System.out.println("--->>>"+md5Hash2);
      
              //加盐加密+多次hash
              Md5Hash md5Hash3 = new Md5Hash(userPwd,salt,3);
              System.out.println("--->>>"+md5Hash3);
      
              //SimpleHash hash = new SimpleHash("md5",userPwd,num,3);
      		
              //将用户信息保存到数据库时,保存加密后的密码,如果生成的随机盐,盐也要保存
              
              return "login";
          }
      
      }
      

加盐处理

  • 在自定义Realm中:

     /** * 获取认证的安全数据(从数据库查询的用户的正确数据) */
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { 
         
            //参数authenticationToken就是传递的 subject.login(token)
            // 从token中获取用户名
            UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
            String username = token.getUsername();
            //根据用户名,从数据库查询当前用户的安全数据
            User user = userDAO.queryUserByUsername(username);
    
    // AuthenticationInfo info = new SimpleAuthenticationInfo(
    // username, //当前用户用户名
    // user.getUserPwd(), //从数据库查询出来的安全密码
    // getName());
    
            //如果数据库中用户的密码是加了盐的
            AuthenticationInfo info = new SimpleAuthenticationInfo(
                    username,           //当前用户用户名
                    user.getUserPwd(),   //从数据库查询出来的安全密码
                    ByteSource.Util.bytes(user.getPwdSalt()),
                    getName());
    
            return info;
        }
    }
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157723.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • SpringFramework5.0 @Indexed注解 简单解析

    纸上得来终觉浅 绝知此事要躬行 —陆游最近在看SpringBoot核编程思想(核心篇),看到走向注解驱动编程这章,里面有讲解到:在SpringFramework5.0引入了一个注解@Indexed ,它可以为Spring的模式注解添加索引,以提升应用启动性能。官网地址:Spring Framework 5.1.12.RELEASE beans-scanning-index…

    2022年2月28日
  • 环信即时通讯——集成客户端

    环信即时通讯——集成客户端

    2021年11月9日
  • Android中的Matrix(矩阵)

    Android中的Matrix(矩阵)Android中的Matrix,了解如何使用Android的矩阵Matrix

    2022年7月3日
  • 更新pycharm版本_pycharm怎么更改python环境

    更新pycharm版本_pycharm怎么更改python环境如下图,记录要勾选Makeavaliabletoallprojects,然后查看是否加载出所有的第三方插件,会遇到插件安装后,运行还是找不到插件的问题,就是这里选择的不对,Pycharm总是会自己修改Baseinterperter路径,安装好后,在这里修改路径,看到有加载出来就可以了…

    2022年8月27日
  • vs2010 sp1下载_vs2005下载

    vs2010 sp1下载_vs2005下载vs2005sp1下载地址、安装方法–更新非常慢2007年03月14日下午09:17(转)VS2005SP1发布,解决只能创建WebSite,无法创建WebApplication项目的问题

    2022年9月28日
  • node.js介绍及其常用命令

    node.js介绍及其常用命令NodeJs简介:-node.js是提供了一个JavaScript的后台运行环境,简单地说就是运行在服务器端的JS浏览器是Javascript的前端网页的运行环境地址:https://nodejs.org/zh-cn/nodejs和javascript的区别1、nodejs中不支持DOM、BOM的操作支持JS的逻辑运算、函数、数据、json、对象、数组等操作2、专业的说法:Node.js是一个事件驱动I/O服务器的Javascipt运行环境,基于Google的V8引擎,V8引擎执行JS的

    2022年7月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号