Skip to content

🔒 字符串加密工具(SecurityHelper)

📖 功能介绍

TIP

SecurityHelper 是一个多算法支持的字符串加密工具类,提供了 MD5、SHA 系列等多种加密算法,适用于密码加密、数据签名等安全场景。

🛠️ 核心功能

加密算法支持

方法算法输出长度安全级别
md5HexMD532位基础
md2HexMD232位基础
sha1HexSHA140位中等
sha256HexSHA25664位较高
sha384HexSHA38496位
sha512HexSHA512128位最高

💡 使用示例

1. MD5加密

java
// 基础MD5加密
String password = "123456";
String md5Password = SecurityHelper.md5Hex(password);
// 结果: e10adc3949ba59abbe56e057f20f883e

// 加盐MD5加密
String salt = "wueasy";
String saltedPassword = SecurityHelper.md5Hex(password + salt);

2. SHA系列加密

java
// SHA256加密(推荐用于密码存储)
String data = "sensitive_data";
String sha256Result = SecurityHelper.sha256Hex(data);

// SHA512加密(适用于高安全要求场景)
String sha512Result = SecurityHelper.sha512Hex(data);

3. 实际应用场景

密码加密存储

java
public class UserService {
    public void register(String username, String password) {
        // 生成盐值
        String salt = generateSalt();
        // 密码加盐后SHA256加密
        String encryptedPassword = SecurityHelper.sha256Hex(password + salt);
        // 存储用户信息和盐值
        saveUser(username, encryptedPassword, salt);
    }
}

数据签名验证

java
public class SignatureService {
    public String generateSignature(Map<String, String> params) {
        // 参数排序并拼接
        String sortedParams = sortAndJoin(params);
        // SHA1签名
        return SecurityHelper.sha1Hex(sortedParams);
    }
}

⚠️ 注意事项

  1. 算法选择

    • MD5/SHA1不再推荐用于密码存储
    • 建议使用SHA256及以上算法
    • 关键数据建议使用SHA512
  2. 安全增强

    • 必须使用加盐处理
    • 避免使用固定盐值
    • 每个用户使用独立盐值
  3. 性能考虑

    • SHA512计算较慢但更安全
    • 根据安全需求选择算法
    • 考虑使用缓存机制
  4. 最佳实践

    • 密码存储使用SHA256+随机盐
    • 签名验证可使用SHA1
    • 定期更新加密算法

🔧 常见问题

1. 加盐处理示例

java
public class PasswordUtils {
    public static String encryptPassword(String password, String salt) {
        return SecurityHelper.sha256Hex(password + salt);
    }
    
    public static String generateSalt() {
        return UUID.randomUUID().toString();
    }
}

2. 密码验证示例

java
public class AuthService {
    public boolean verifyPassword(String inputPassword, String storedPassword, String salt) {
        String encryptedInput = SecurityHelper.sha256Hex(inputPassword + salt);
        return encryptedInput.equals(storedPassword);
    }
}

3. 签名生成示例

java
public class SignUtils {
    public static String generateApiSignature(Map<String, String> params, String secretKey) {
        // 参数排序
        String sortedParams = params.entrySet().stream()
            .sorted(Map.Entry.comparingByKey())
            .map(e -> e.getKey() + "=" + e.getValue())
            .collect(Collectors.joining("&"));
            
        // 添加密钥并签名
        return SecurityHelper.sha1Hex(sortedParams + secretKey);
    }
}