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; } }