本文目录导读:

我来为您提供几个实用的Java数据保护案例,涵盖加密、脱敏和安全传输等场景。
用户密码加密存储案例
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
public class PasswordProtection {
// 使用bcrypt算法加密密码(推荐方案)
public static class BCryptPasswordHasher {
private static final int STRENGTH = 10; // 工作因子
public static String hashPassword(String password) {
return BCrypt.hashpw(password, BCrypt.gensalt(STRENGTH));
}
public static boolean checkPassword(String password, String hashedPassword) {
return BCrypt.checkpw(password, hashedPassword);
}
}
// 使用SHA-256 + 盐值加密密码(传统方案)
public static class SHA256PasswordHasher {
public static String hashPassword(String password, String salt) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
String saltedPassword = password + salt;
byte[] hash = md.digest(saltedPassword.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("SHA-256 algorithm not found", e);
}
}
public static String generateSalt() {
SecureRandom random = new SecureRandom();
byte[] salt = new byte[16];
random.nextBytes(salt);
return Base64.getEncoder().encodeToString(salt);
}
}
// 使用示例
public static void main(String[] args) {
// BCrypt示例
String password = "MySecurePassword123!";
String hashedPassword = BCryptPasswordHasher.hashPassword(password);
System.out.println("BCrypt Hashed: " + hashedPassword);
System.out.println("Verify: " + BCryptPasswordHasher.checkPassword(password, hashedPassword));
// SHA-256示例
String salt = SHA256PasswordHasher.generateSalt();
String sha256Hashed = SHA256PasswordHasher.hashPassword(password, salt);
System.out.println("SHA-256 Hashed: " + sha256Hashed);
}
}
数据脱敏处理案例
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DataDesensitization {
// 手机号脱敏
public static String maskPhoneNumber(String phoneNumber) {
if (phoneNumber == null || phoneNumber.length() < 7) {
return phoneNumber;
}
return phoneNumber.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
// 身份证号脱敏
public static String maskIdCard(String idCard) {
if (idCard == null || idCard.length() < 10) {
return idCard;
}
return idCard.replaceAll("(\\d{4})\\d{10}(\\w{4})", "$1**********$2");
}
// 邮箱脱敏
public static String maskEmail(String email) {
if (email == null || !email.contains("@")) {
return email;
}
String[] parts = email.split("@");
String username = parts[0];
String domain = parts[1];
if (username.length() <= 2) {
return username.charAt(0) + "***@" + domain;
}
return username.substring(0, 2) + "***@" + domain;
}
// 银行卡号脱敏
public static String maskBankCard(String cardNumber) {
if (cardNumber == null || cardNumber.length() < 8) {
return cardNumber;
}
return cardNumber.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1 **** **** $2");
}
// 姓名脱敏
public static String maskName(String name) {
if (name == null || name.length() <= 1) {
return name;
}
if (name.length() == 2) {
return name.charAt(0) + "*";
}
StringBuilder masked = new StringBuilder();
masked.append(name.charAt(0));
for (int i = 1; i < name.length() - 1; i++) {
masked.append("*");
}
masked.append(name.charAt(name.length() - 1));
return masked.toString();
}
// 使用示例
public static void main(String[] args) {
System.out.println("手机号: " + maskPhoneNumber("13812345678"));
System.out.println("身份证: " + maskIdCard("110101199001011234"));
System.out.println("邮箱: " + maskEmail("zhangsan@example.com"));
System.out.println("银行卡: " + maskBankCard("6217001234567890123"));
System.out.println("姓名: " + maskName("张三丰"));
}
}
AES加密解密案例
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;
public class AESEncryption {
private static final int AES_KEY_SIZE = 256;
private static final int GCM_IV_LENGTH = 12;
private static final int GCM_TAG_LENGTH = 16; // 128位
// 生成AES密钥
public static SecretKey generateAESKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(AES_KEY_SIZE);
return keyGenerator.generateKey();
}
// AES-GCM加密
public static String encrypt(String plaintext, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
// 生成随机IV
byte[] iv = new byte[GCM_IV_LENGTH];
SecureRandom random = new SecureRandom();
random.nextBytes(iv);
GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, gcmSpec);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes());
// 将IV和密文组合在一起
byte[] encrypted = new byte[iv.length + ciphertext.length];
System.arraycopy(iv, 0, encrypted, 0, iv.length);
System.arraycopy(ciphertext, 0, encrypted, iv.length, ciphertext.length);
return Base64.getEncoder().encodeToString(encrypted);
}
// AES-GCM解密
public static String decrypt(String encryptedData, SecretKey secretKey) throws Exception {
byte[] decoded = Base64.getDecoder().decode(encryptedData);
// 提取IV和密文
byte[] iv = new byte[GCM_IV_LENGTH];
byte[] ciphertext = new byte[decoded.length - GCM_IV_LENGTH];
System.arraycopy(decoded, 0, iv, 0, iv.length);
System.arraycopy(decoded, iv.length, ciphertext, 0, ciphertext.length);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv);
cipher.init(Cipher.DECRYPT_MODE, secretKey, gcmSpec);
byte[] plaintext = cipher.doFinal(ciphertext);
return new String(plaintext);
}
// 使用示例
public static void main(String[] args) throws Exception {
SecretKey key = generateAESKey();
String originalData = "这是需要加密的敏感数据!";
String encrypted = encrypt(originalData, key);
System.out.println("加密后: " + encrypted);
String decrypted = decrypt(encrypted, key);
System.out.println("解密后: " + decrypted);
// 验证
System.out.println("是否一致: " + originalData.equals(decrypted));
}
}
HTTPS通信配置案例
import javax.net.ssl.*;
import java.io.*;
import java.net.URL;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
public class HTTPSExample {
// 配置信任自签名证书
public static SSLContext createSSLContext(String certPath, String password) throws Exception {
// 加载证书
CertificateFactory cf = CertificateFactory.getInstance("X.509");
FileInputStream certInputStream = new FileInputStream(certPath);
X509Certificate certificate = (X509Certificate) cf.generateCertificate(certInputStream);
certInputStream.close();
// 创建KeyStore
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
keyStore.setCertificateEntry("customCert", certificate);
// 创建TrustManager
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
// 创建SSLContext
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
return sslContext;
}
// 忽略证书验证(仅用于开发环境!)
public static SSLContext createInsecureSSLContext() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
}
};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
return sslContext;
}
// 使用HTTPS发送请求
public static String sendHTTPSRequest(String urlString, SSLContext sslContext) throws Exception {
URL url = new URL(urlString);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(sslContext.getSocketFactory());
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
// 读取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
return response.toString();
}
// 使用示例
public static void main(String[] args) {
try {
// 开发环境使用不安全的SSL
SSLContext sslContext = createInsecureSSLContext();
String response = sendHTTPSRequest("https://api.example.com/data", sslContext);
System.out.println("HTTPS响应: " + response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
数据库敏感字段加密案例
import javax.persistence.*;
import java.util.Base64;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@Convert(converter = SensitiveDataConverter.class)
private String phoneNumber;
@Convert(converter = SensitiveDataConverter.class)
private String email;
// getters and setters
}
// JPA属性转换器
@Converter
public class SensitiveDataConverter implements AttributeConverter<String, String> {
private static final String ENCRYPTION_KEY = "your-encryption-key-here";
@Override
public String convertToDatabaseColumn(String attribute) {
if (attribute == null) {
return null;
}
// 加密逻辑
return encrypt(attribute);
}
@Override
public String convertToEntityAttribute(String dbData) {
if (dbData == null) {
return null;
}
// 解密逻辑
return decrypt(dbData);
}
private String encrypt(String value) {
// 实际项目中应使用AES等加密算法
return Base64.getEncoder().encodeToString(value.getBytes());
}
private String decrypt(String value) {
// 实际项目中应使用AES等加密算法
return new String(Base64.getDecoder().decode(value));
}
}
日志脱敏工具案例
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
public class LogDesensitizer {
private static final Map<Pattern, String> PATTERNS = new HashMap<>();
static {
// 手机号
PATTERNS.put(Pattern.compile("(1[3-9]\\d)\\d{4}(\\d{4})"), "$1****$2");
// 身份证
PATTERNS.put(Pattern.compile("(\\d{6})\\d{8}(\\d{4})"), "$1********$2");
// 银行卡
PATTERNS.put(Pattern.compile("(\\d{4})\\d{10}(\\d{4})"), "$1****$2");
// 邮箱
PATTERNS.put(Pattern.compile("(\\w{2})\\w+(@\\w+\\.\\w+)"), "$1***$2");
// IP地址
PATTERNS.put(Pattern.compile("(\\d{1,3}\\.\\d{1,3})\\.\\d{1,3}\\.\\d{1,3}"), "$1.*.*");
}
public static String desensitize(String logMessage) {
String result = logMessage;
for (Map.Entry<Pattern, String> entry : PATTERNS.entrySet()) {
result = entry.getKey().matcher(result).replaceAll(entry.getValue());
}
return result;
}
// 使用示例
public static void main(String[] args) {
String log = "用户 13812345678 使用邮箱 testuser@example.com 登录,IP: 192.168.1.100";
System.out.println("原始日志: " + log);
System.out.println("脱敏后: " + desensitize(log));
}
}
注意事项
- 密钥管理:不要将密钥硬编码在代码中,应使用密钥管理服务
- 密码算法:密码存储推荐使用bcrypt、scrypt或argon2
- 传输安全:生产环境必须使用有效的SSL/TLS证书
- 合规要求:遵守GDPR、个人数据保护法等法规
- 性能考虑:加密操作会影响性能,需要合理设计缓存策略
这些案例涵盖了Java数据保护的常见场景,可以根据实际需求进行调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播