package com.zhentao.util; import org.springframework.stereotype.Component; import org.springframework.util.DigestUtils; import java.nio.charset.StandardCharsets; import java.security.SecureRandom; import java.util.Base64; /** * 密码加密工具类 * 使用MD5(密码+盐)的方式加密 */ @Component public class PasswordUtil { /** * 生成随机盐(32位) * * @return 盐字符串 */ public String generateSalt() { SecureRandom random = new SecureRandom(); byte[] saltBytes = new byte[16]; random.nextBytes(saltBytes); return Base64.getEncoder().encodeToString(saltBytes).substring(0, 32); } /** * 加密密码 * 加密方式:MD5(密码 + 盐) * * @param password 原始密码 * @param salt 盐 * @return 加密后的密码 */ public String encryptPassword(String password, String salt) { if (password == null || salt == null) { throw new IllegalArgumentException("密码和盐不能为空"); } String passwordWithSalt = password + salt; return DigestUtils.md5DigestAsHex(passwordWithSalt.getBytes(StandardCharsets.UTF_8)); } /** * 验证密码 * * @param inputPassword 用户输入的密码 * @param storedPassword 数据库中存储的加密密码 * @param salt 盐 * @return 是否匹配 */ public boolean verifyPassword(String inputPassword, String storedPassword, String salt) { if (inputPassword == null || storedPassword == null || salt == null) { return false; } String encryptedPassword = encryptPassword(inputPassword, salt); return encryptedPassword.equals(storedPassword); } }