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;
        }
    }
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pl sql 查看数据库版本「建议收藏」

    pl sql 查看数据库版本「建议收藏」命令窗口执行语句:select*fromv$version;可以查看数据库版本信息

    2022年10月12日
  • java卸载不了_java卸载不了怎么处理?卸载时总出现这个

    java卸载不了_java卸载不了怎么处理?卸载时总出现这个windowsXP在安装有些软件时,会弹出警告框:“不能访问windowsInstaller服务,可能是你在安全模式下运行windows,或者windowsInstaller没有正确安装。请和你的支持人员联系以获得帮助。”的解决方案:windowsinstaller没有正确安装到服务里停掉windowsinstaller服务然后下载InstMsiW.exe右击msi.inf点击安装…

  • Activity 工作流框架学习总结「建议收藏」

    Activity 工作流框架学习总结「建议收藏」环境的搭建和数据表的了解1.什么是工作流?工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。工作流管理系统(WorkflowManagementSystem,WfMS)是一个软件系统,它完成工作量的定义

  • k8s 很多pod evicted状态

    k8s 很多pod evicted状态k8s许多pod出现evicted状态。evicted状态是pod被驱逐无法起来问题原因:资源问题,资源不够解决办法:删除一些没用的大文件,然后将pod删除重建kubectlgetpods-ningress-nginx|awk‘{print$1}’|xargskubectldeletepods-ningress-nginxkubectlgetpods|grepEvicted|awk‘{print$1}’|xargskubectldelet

  • 如何用python画一个圆(python主要是做什么的)

    本文为大家分享了python实现画圆功能的实例代码,有需要的朋友请参考下文!importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.patchesimportPolygonimportmatplotlib.patchesasmpatchesfig=plt.figure(figsize=(16,8))ax=…

  • 万能激活成功教程器修改器_闪照激活成功教程软件

    万能激活成功教程器修改器_闪照激活成功教程软件第一步:下载补丁文件如果是2017.2以上版本的,需要JetbrainsCrack-2.6.6及以上版本如果是2018.1及以上版本的,需要JetbrainsCrack-2.8及以上版本本人是windows64G系统,安装的2018.1.4专业版,试过JetbrainsCrack-2.6的,只能延长有效期一年;使用JetbrainsCrack-2.8的版本,有效期到2099年12月31…

    2022年10月28日

发表回复

您的电子邮箱地址不会被公开。

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