1.创建加密类
package cn.tedu.boot.demo.util; import org.springframework.stereotype.Component; import org.springframework.util.DigestUtils; import java.util.UUID; @Component public class PasswordEncoder { public String encode(String rawPassword) { // 加密过程 // 1. 使用MD5算法 // 2. 使用随机的盐值 // 3. 循环5次 // 4. 盐的处理方式为:盐 + 原密码 + 盐 + 原密码 + 盐 // 注意:因为使用了随机盐,盐值必须被记录下来,本次的返回结果使用$分隔盐与密文 String salt = UUID.randomUUID().toString().replace("-", ""); String encodedPassword = rawPassword; for (int i = 0; i < 5; i++) { encodedPassword = DigestUtils.md5DigestAsHex( (salt + encodedPassword + salt + encodedPassword + salt).getBytes()); } return salt +encodedPassword; } public boolean matches(String rawPassword, String encodedPassword) { String salt = encodedPassword.substring(0, 32); String newPassword = rawPassword; for (int i = 0; i < 5; i++) { newPassword = DigestUtils.md5DigestAsHex( (salt + newPassword + salt + newPassword + salt).getBytes()); } newPassword = salt + newPassword; return newPassword.equals(encodedPassword); } }
2.测试类
@Test public void testPasswordEncoderEncode() { String rawPassword = "123456"; System.out.println(rawPassword); for (int i = 0; i < 5; i++) { String encodedPassword = new PasswordEncoder().encode(rawPassword); System.out.println(encodedPassword); } } //先运行上面这个代码,把运行结果中的一条数据拿到下面来测试 @Test public void testPasswordEncoderMatches() { String rawPassword = "123456"; String encodedPassword = "dec900075a0a4f30a62e222fac72d15679333cbcb75e95a05ebefb46cdd2ced5"; System.out.println(new PasswordEncoder().matches(rawPassword, encodedPassword)); } //看是否为: true
@Test void passwordId(){ String password ="1234567890abcdesa52a1"; String newPassword =new PasswordEncode().encode(password); System.out.println("newPassword = " + newPassword); System.out.println(new PasswordEncode().matches(password,newPassword)); }