主题切换
🔒 字符串加密工具(SecurityHelper)
📖 功能介绍
TIP
SecurityHelper 是一个多算法支持的字符串加密工具类,提供了 MD5、SHA 系列等多种加密算法,适用于密码加密、数据签名等安全场景。
🛠️ 核心功能
加密算法支持
方法 | 算法 | 输出长度 | 安全级别 |
---|---|---|---|
md5Hex | MD5 | 32位 | 基础 |
md2Hex | MD2 | 32位 | 基础 |
sha1Hex | SHA1 | 40位 | 中等 |
sha256Hex | SHA256 | 64位 | 较高 |
sha384Hex | SHA384 | 96位 | 高 |
sha512Hex | SHA512 | 128位 | 最高 |
💡 使用示例
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);
}
}
⚠️ 注意事项
算法选择
- MD5/SHA1不再推荐用于密码存储
- 建议使用SHA256及以上算法
- 关键数据建议使用SHA512
安全增强
- 必须使用加盐处理
- 避免使用固定盐值
- 每个用户使用独立盐值
性能考虑
- SHA512计算较慢但更安全
- 根据安全需求选择算法
- 考虑使用缓存机制
最佳实践
- 密码存储使用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);
}
}