package com.sinata.appointment.util;
|
|
import java.nio.charset.StandardCharsets;
|
import java.util.Base64;
|
|
/**
|
* 敏感字段占位处理:生产环境应替换为 KMS + 对称加密。
|
*/
|
public final class SensitiveDataUtil {
|
|
private static final String PREFIX = "ENC:";
|
|
private SensitiveDataUtil() {}
|
|
public static String maskIdCard(String plain) {
|
if (plain == null || plain.length() < 8) {
|
return "****";
|
}
|
int starLen = plain.length() - 8;
|
String stars = "*".repeat(Math.max(starLen, 1));
|
return plain.substring(0, 4) + stars + plain.substring(plain.length() - 4);
|
}
|
|
public static String encryptIdCard(String plain) {
|
if (plain == null || plain.isBlank()) {
|
return null;
|
}
|
return PREFIX + Base64.getEncoder().encodeToString(plain.getBytes(StandardCharsets.UTF_8));
|
}
|
|
public static String decryptIdCard(String cipher) {
|
if (cipher == null || cipher.isBlank()) {
|
return null;
|
}
|
String t = cipher.trim();
|
if (t.startsWith(PREFIX)) {
|
String raw = t.substring(PREFIX.length());
|
return new String(Base64.getDecoder().decode(raw), StandardCharsets.UTF_8);
|
}
|
return t;
|
}
|
}
|