35.4 Password Encoding

spring-security-crypt模块的密码包支持对密码进行编码。PasswordEncoder 是中央服务接口,具有以下签名:

1 public interface PasswordEncoder {
2 
3 String encode(String rawPassword);
4 
5 boolean matches(String rawPassword, String encodedPassword);
6 }

如果原始密码编码后等于编码密码,则matches方法返回true。该方法旨在支持基于密码的身份验证方案。

BCryptPasswordEncoder实现使用广泛支持的“bcrypt”算法来散列密码。加密使用一个随机的16字节盐值,是一个故意慢的算法,以阻止密码破解。它所做的工作量可以使用“强度”参数进行调整,该参数取值范围为4到31。该值越高,计算哈希所需做的工作就越多。默认值为10。您可以在部署的系统中更改该值,而不会影响现有密码,因为该值也存储在编码的哈希中。

1 // Create an encoder with strength 16
2 BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(16);
3 String result = encoder.encode("myPassword");
4 assertTrue(encoder.matches("myPassword", result));

Pbkdf2PasswordEncoder 实现使用PBKDF 2算法对密码进行哈希处理。为了击败密码破解,PBKDF2是一个故意慢的算法,应该调整到需要大约0.5秒来验证您系统上的密码。

1 // Create an encoder with all the defaults
2 Pbkdf2PasswordEncoder encoder = new Pbkdf2PasswordEncoder();
3 String result = encoder.encode("myPassword");
4 assertTrue(encoder.matches("myPassword", result));

 

posted @ 2020-08-15 14:56  节日快乐  阅读(140)  评论(0编辑  收藏  举报