MD5加密详解

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
上一篇 2022年7月27日 下午2:16
下一篇 2022年7月27日 下午2:16


相关推荐

  • php反射类ReflectionClass用法实例详解

    php反射类ReflectionClass用法实例详解这篇文章主要介绍了php反射类ReflectionClass用法,结合实例形式较为详细的分析了php反射类的概念、功能与具体使用方法,需要的朋友可以参考下本文实例讲述了php反射类Reflectio

    2022年7月1日
    30
  • 腾讯鹅厂门口免费安装OpenClaw并颁发小龙虾出生证明

    腾讯鹅厂门口免费安装OpenClaw并颁发小龙虾出生证明

    2026年3月13日
    2
  • 图解MySQL索引–B-Tree(B+Tree)「建议收藏」

    图解MySQL索引–B-Tree(B+Tree)

    2022年2月15日
    73
  • 史上最全 Java 多线程面试题及答案「建议收藏」

    史上最全 Java 多线程面试题及答案「建议收藏」这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。1、多线程有什么用? 一个可能在很多人…

    2022年8月27日
    7
  • C++学习——数据类型(强制)转换详解

    C++学习——数据类型(强制)转换详解有时,编程的过程中需要将值从一种数据类型转换为另一种数据类型。C++ 提供了这样做的方法。如果将一个浮点值分配给一个 int 整型变量,该变量会接收什么值?如果一个 int 整数乘以一个 float 浮点数,结果将会是什么数据类型?如果一个 double 浮点数除以一个 unsigned int 无符号整数会怎么样?是否有办法预测在这些情况下会发生什么?答案是肯定的。当运算符的操作数具有不同的…

    2022年8月18日
    11
  • java sqlldr_sqlldr详解

    java sqlldr_sqlldr详解Oracle 的 SQL LOADER 可以将外部数据加载到数据库表中 下面是 SQL LOADER 的基本特点 1 能装入不同数据类型文件及多个数据文件的数据 2 可装入固定格式 自由定界以及可度长格式的数据 3 可以装入二进制 压缩十进制数据 4 一次可对多个表装入数据 5 连接多个物理记录装到一个记录中 6 对一单记录分解再装入到表中 7 可以用数对制定列生成唯一的 KEY8 可对磁盘或磁带数据文件装入制表中

    2026年3月20日
    2

发表回复

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

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