Spring Security 3.1 中功能强大的加密工具 PasswordEncoder
来源:互联网 发布:la域名注册查询 编辑:程序博客网 时间:2024/05/16 06:16
3.1.0版本中新的PasswordEncoder继承关系
而在Spring-Security 3.1.0 版本之后,Spring-security-crypto模块中的password包提供了更给力的加密密码的支持,这个包中也有PasswordEncoder接口,接口定义如下。
Public interface PasswordEncoder{
String encode(String rawPassword);
Boolean matches(String rawPassword,String encodedPassword);
}
定义了两个方法,encode方法是对方法加密,而match方法是用来验证密码和加密后密码是否一致的,如果一致则返回true。和authentication.encoding包中的PasswordEncoder接口相比,简化了许多。
位于org.springframeword.security.crypto.password包中的
StandardPasswordEncoder类,是PasswordEncoder接口的(唯一)一个实现类,是本文所述加密方法的核心。它采用SHA-256算法,迭代1024次,使用一个密钥(site-wide secret)以及8位随机盐对原密码进行加密。
随机盐确保相同的密码使用多次时,产生的哈希都不同; 密钥应该与密码区别开来存放,加密时使用一个密钥即可;对hash算法迭代执行1024次增强了安全性,使暴力破解变得更困难些。
和上一个版本的PasswordEncoder比较,好处显而易见:盐值不用用户提供,每次随机生成;多重加密————迭代SHA算法+密钥+随机盐来对密码加密,大大增加密码破解难度。
OK,了解了原理我们可以来测试一下:- import org.springframework.security.crypto.password.PasswordEncoder;
- import org.springframework.security.crypto.password.StandardPasswordEncoder;
- /**
- * @author XUYI
- * Spring Security 3.1 PasswordEncoder
- */
- public class EncryptUtil {
- //从配置文件中获得
- private static final String SITE_WIDE_SECRET = "my-secret-key";
- private static final PasswordEncoder encoder = new StandardPasswordEncoder(
- SITE_WIDE_SECRET);
- public static String encrypt(String rawPassword) {
- return encoder.encode(rawPassword);
- }
- public static boolean match(String rawPassword, String password) {
- return encoder.matches(rawPassword, password);
- }
- public static void main(String[] args) {
- System.out.println(EncryptUtil.encrypt("每次结果都不一样伐?"));
- System.out.println(EncryptUtil.encrypt("每次结果都不一样伐?"));
- System.out.println(EncryptUtil.encrypt("每次结果都不一样伐?"));
- System.out.println(EncryptUtil.encrypt("每次结果都不一样伐?"));
- System.out.println(EncryptUtil.encrypt("每次结果都不一样伐?"));
- //但是把每次结果拿出来进行match,你会发现可以得到true。
- }
public static void main(String[] args) { System.out.println(EncryptUtil.encrypt("test")); System.out.println(EncryptUtil.encrypt("test")); System.out.println(EncryptUtil.encrypt("test")); }
b84e62f1d332154e1db9da86c1ec30ee86c43f0307fd1c4b06873167eb08ca674bbf72cfe2a99b5d 05b78338cb2c275e471533b05eff31979f5e4df9695ab72eb55cfe3abd92a7d581f250fc9d37d801 aba3493a7cd4e646a1ea33b2a1b074b03899b5e76618bfea70542fa337e286cb2ac27bde4f4be903
private boolean checkPassword(Bdf2User bdf2User,String password) {ShaPasswordEncoder passwordEncoder = new ShaPasswordEncoder() ;boolean ret = passwordEncoder.isPasswordValid(bdf2User.getPassword(), password, bdf2User.getSalt());if(ret)return true;return false;}
- Spring Security 3.1 中功能强大的加密工具 PasswordEncoder
- Spring Security 3.1 中功能强大的加密工具 PasswordEncoder
- Spring Security 3.1 中功能强大的加密工具 PasswordEncoder
- Spring Security 3.1 中功能强大的加密工具 PasswordEncoder
- 字符串加密,校验工具类 org.springframework.security.crypto.password.PasswordEncoder
- Spring Security中<@security.authorize的使用
- Spring Security加密策略
- Spring Security加密策略
- Spring Security加密策略
- Spring Security加密策略
- Spring Security加密策略
- Spring Security加密策略
- spring security 3中推荐使用BCrypt算法加密密码
- 功能强大的命令行工具Powershell
- spring security加密密码修改
- Spring Security-用户密码自定义加密
- Spring Security加密策略(转载)
- PasswordEncoder加密后如何验证问题
- tjut 4310
- 猜数字游戏
- Python 程序扩展名(py, pyc, pyw, pyo, pyd)及发布程序时的选择
- 不可以! 南阳理工ACM 题目1071
- 《机器学习》周志华学习笔记——第一章 绪论
- Spring Security 3.1 中功能强大的加密工具 PasswordEncoder
- 捋一捋Android的转场动画
- 重新认识 MVC 和 三层设计模式
- iOSweex集成入门,weex快速上手教程,weex集成到iOS工程注意事项(一)
- sdut oj3333 数据结构实验之栈六:下一较大值(二)
- 不愿让别人看见,只自己看的注释应该怎么写
- Python 學習手冊(第4版)
- Stanford深度学习与自然语言处理讲义下载(CS224)
- 【5】使用结巴分词对分类语料库分词