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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle 数据库隔离级别

    oracle 数据库隔离级别[b]事务不同引发的状况:[/b]脏读(Dirtyreads)一个事务读取另一个事务尚未提交的修改时,产生脏读很多数据库允许脏读以避免排它锁的竞争。不可重复读(Nonrepeatablereads)同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发…

    2022年5月9日
    28
  • 基本布局-QHBoxLayout类、QVBoxLayout类、QGridLayout类

    基本布局-QHBoxLayout类、QVBoxLayout类、QGridLayout类(1)新建QtWidgetApplication,项目名UserInfo,基类QDialog,取消创建界面;(2)打开dialog.h头文件,在头文件中声明对话框中的各个控件,添加代码#ifndefDIALOG_H#defineDIALOG_H#include//添加头文件#include#include#inclu

    2022年6月21日
    47
  • 在图形管理工具mysql workbench窗口_sqlite可视化工具

    在图形管理工具mysql workbench窗口_sqlite可视化工具可视化数据库管理工具MySQLWorkbench的安装配置及使用MySQLWorkbench是为数据库管理员、程序开发者和系统规划师提供可视化的Sql开发、数据库建模、以及数据库管理功能的工具。1.下载官网下载地址:https://dev.mysql.com/downloads/workbench/这里下载的版本是:community,为社区版,非商用,可以免费使用。2.安装安装过程就不多说了,双击安装,根据提示进行,非常简单。3.打开安装完成后,双击桌面图标即可打开,界

    2022年8月22日
    7
  • 大数据精准营销的网络营销策略研究_指南针的使用

    大数据精准营销的网络营销策略研究_指南针的使用互联网时代,也是一个数据大爆炸的时代,很多人通过网络营销,却忽略了一个重要的基础,那就是数据,而以各种各样数据为基础的互联网营销,需要的是一种大数据营销的思维,这种思维对于提升营销的质量和成功率都有极大的帮助。何为大数据营销,那么它又和网络营销的有何关联呢?其实大数据营销并不是一个复杂的概念,指的是通过所针对的目标的各种数据的变化和分析,来获得营销方向的指导,这种数据通过表格、文字等形式表现出来,…

    2022年9月26日
    3
  • 32个Python爬虫项目让你一次吃到撑

    32个Python爬虫项目让你一次吃到撑===========================若出现链接失效,请留言会及时修复===========================今天为大家整理了32个Python爬虫项目。整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心。所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)OWechatSogou[1]-微信公众号爬虫。基于搜狗微信搜索的微…

    2022年6月18日
    40
  • 游戏开发学习路线

    游戏开发学习路线当你在吃鸡,王者农药的时候是否有想过如何才能做出一款这样让人神迷的游戏?游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指引,是可以事半功倍的。下面就结合自己的学习历程和大家分享下游戏开发的学习路线。1.介绍游戏开发分为客户端和服务端两条不同的路线,路线不同,所需的技能也不同。但有些…

    2022年4月19日
    79

发表回复

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

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