Spring Security 中的盐值加密
来源:互联网 发布:怎么设置淘宝发信息 编辑:程序博客网 时间:2024/06/14 23:42
在 Spring Security 文档中有这么一句话: "盐值的原理非常简单,就是先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算,这样一来,就算密码是一个很常见的字符串,再加上用户名,最后算出来的md5值就没那么容易猜出来了。因为攻击者不知道盐值的值,也很难反算出密码原文。"
呵呵, 问题如何理解这句话: "先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算". 例如, 在 applicationContext-security.xml 文件中的配置如下:
- <authentication-provider user-service-ref="userDetailsService">
- <password-encoder hash="md5">
- <!-- 将每个用户的username作为盐值 -->
- <salt-source user-property="username"/>
- </password-encoder>
- </authentication-provider>
假设用户名是 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
转载地址:http://blog.csdn.net/simpleit/article/details/5448531
0 0
- Spring Security 中的盐值加密
- Spring Security 中的盐值加密
- Spring Security加密策略
- Spring Security加密策略
- Spring Security加密策略
- Spring Security加密策略
- Spring Security加密策略
- Spring Security加密策略
- spring security加密密码修改
- Spring Security-用户密码自定义加密
- Spring Security加密策略(转载)
- Spring Security中的ACL
- 浅谈使用spring security中的BCryptPasswordEncoder方法对密码进行加密与密码匹配
- spring security 安全策略加密解密处理过程
- Spring Security 4.x 启用BCrypt加密
- Spring Security 取Session中的值和修改userDetails
- Spring Security 取Session中的值和修改userDetails(转)
- Spring Security 取Session中的值和修改userDetails(转)
- ssh
- 猴子吃桃问题
- Rotating Scoreboard - POJ 3335 半平面交
- SharePoint 2013 的软件边界和限制
- 通过注册表设置IE的ActiveX运行选项
- Spring Security 中的盐值加密
- 数据库基本操作
- 阿里巴巴2015算法工程师实习生笔试卷
- 常用的排序
- 统计字符的个数(经常用得到)
- C#关于DateTime得到的当前时间的格式和用法
- eclipse 常用快捷键
- linux驱动程序开发流程
- Objective-C开发编码规范