博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Security中的MD5盐值加密
阅读量:5223 次
发布时间:2019-06-14

本文共 1331 字,大约阅读时间需要 4 分钟。

在 Security 文档中有这么一句话: "盐值的原理非常简单,就是先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算,这样一来,就算密码是一个很常见的字符串,再加上用户名,最后算出来的md5值就没那么容易猜出来了。因为攻击者不知道盐值的值,也很难反算出密码原文。"

     问题如何理解这句话: "先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算".  例如, 在 applicationContext-security.xml 文件中的配置如下:

          
           
           
           

 假设用户名是 Tom, 密码为 123456, 那么在中存放的值应该是什么?

   通过查看 Spring Security 的 org.springframework.security.providers.encoding.BasePasswordEncoder 类可知 Spring Security 通过如下方式来匹配在数据库中已经被盐值加密的密码:  

protected String mergePasswordAndSalt(String password, Object salt, boolean strict) {          if (password == null) {              password = "";          }            if (strict && (salt != null)) {              if ((salt.toString().lastIndexOf("{") != -1) || (salt.toString().lastIndexOf("}") != -1)) {                  throw new IllegalArgumentException("Cannot use { or } in salt.toString()");              }          }            if ((salt == null) || "".equals(salt)) {              return password;          } else {              return password + "{" + salt.toString() + "}";          }  }  

即通过 password + "{" + salt.toString() + "}" 中方式把 "密码和盐值指定的内容合并在一起". 所以对于用户名是 Tom, 密码为 123456 的用户在数据库中存放的密码应该为对 "123456{Tom}" md5 验算后的值: 610c492873b994f96f93e342a56bcd68

转载于:https://www.cnblogs.com/zhxn/p/7093387.html

你可能感兴趣的文章
2道关于String字符串类型的面试题
查看>>
自学Python快速入门
查看>>
聊聊flink的Async I/O
查看>>
在 Android Studio 上实时调试数据库( SQLite )
查看>>
SVN服务器搭建和使用(二)
查看>>
Web api
查看>>
分布式系统消息中间件——RabbitMQ的使用基础篇
查看>>
【个人介绍】
查看>>
T-SQL:探究UNOIN,INTERSECT,EXCEPT集合运算符(十一)
查看>>
从零开始学安全(四)●Vmware CentOS 7 添加静态ip联网
查看>>
hashSet
查看>>
script标签
查看>>
状态码
查看>>
100735D
查看>>
双击文本变成输入框,日历控件
查看>>
C++-多态,纯虚函数,抽象类,工厂模式,虚析构函数(day10)
查看>>
枚举GC Roots根节点
查看>>
java面试题1
查看>>
Leetcode: Jump Game II
查看>>
jsp/servlet中的相对路径
查看>>