前言
这里使用的是spring框架中的DigestUtils工具对密码进行加密,基于sprinboot技术。
注意:在实际开发中,前端在网络传输密码时,肯定是对密码进行加密处理的,比如使用RSA技术。本次我没有考虑前端密码加密的情况,如果有需要,可以自行在方法中添加对前端密码解密的逻辑;
代码
import org.springframework.util.DigestUtils; import java.util.UUID; public class PasswordEncode { /** * 1.随机生成字符串,作为盐,意味改变原来密码的味道 * 2.加密格式为 盐 + 密码 + 盐 + 密码 + 盐 (为了使其更难破解这里循环了五次进行,增加了复杂度) * 3.因为盐是随机生成的,在验证密码时需要使用,所以最后在生成的密文前加上盐 slat + encode * @param rawPassword * @return */ public static String encode(String rawPassword) { //如果前端对密码进行了加密处理,这里可以添加解密的逻辑,然后再通过DigestUtils加密 //todo 解密逻辑 String slat = UUID.randomUUID().toString().replace("-", ""); String encode = ""; for (int i = 0; i < 5; i++) { encode = DigestUtils.md5DigestAsHex((slat + rawPassword + slat + rawPassword + slat).getBytes()); } return slat + encode; } /** * 1.取出盐:在加密的时候,我们在密文前面加上了盐,盐的长度为32 * 2.获取密文:对密码进行同样的加密方式 * 3.比较返回,如果密码是正确的,会获得一样的密文 * @param rawPassword * @param encode * @return */ public static boolean matches(String rawPassword, String encode) { //如果前端对密码进行了加密处理,这里可以添加解密的逻辑,然后再通过DigestUtils加密 //todo 解密逻辑 String slat = encode.substring(0, 32); String newPassword = ""; for (int i = 0; i < 5; i++) { newPassword = DigestUtils.md5DigestAsHex((slat + rawPassword + slat + rawPassword + slat).getBytes()); } return encode.equals(slat + newPassword); } }