当前位置: 首页 > news >正文

数据库驱动改造加密姓名手机号证件号邮箱敏感信息

首先解压出驱动日志打印输出类

之后进行改造,使用正则表达式对邮箱手机身份证加密

XM_PATTERN等为姓名,名称字段进行加密,使输出的sql对该字段加密

使用类以及核心代码如下

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.regex.Matcher;
import java.util.regex.Pattern;{private static final Logger logger = LoggerFactory.getLogger(SpyLog.class);private static final Pattern EMAIL_PATTERN = Pattern.compile("([a-zA-Z0-9_.-])([a-zA-Z0-9_.-]+)(@[a-zA-Z0-9.]+)");private static final Pattern PHONE_PATTERN = Pattern.compile("(1[3456789]\\d)(\\d{4})(\\d{4})");private static final Pattern ID_PATTERN = Pattern.compile("([1-9]\\d{5})(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])(\\d\\d)(\\d)(\\d|X|x)");//private static final Pattern XM_PATTERN = Pattern.compile("(?i)xm='([^']*)'");private static final Pattern MC_PATTERN = Pattern.compile("(?i)mc='([^']*)'");private static final Pattern ZJMC_PATTERN = Pattern.compile("(?i)expertname='([^']*)'");private static final String SQL_STACK_TRACE = "sql stack trace";public SpyLog() {}public static void info(Object obj, String category, Object... info) {if (SpyConfiguration.isCategoryEnabled(category)) {StringBuffer sb = new StringBuffer(category);if (info != null) {Object[] var7 = info;int var6 = info.length;for(int var5 = 0; var5 < var6; ++var5) {Object element = var7[var5];sb.append("|").append(element);}}logger.info(filter(sb.toString()));if (SpyConfiguration.isStackTraceEnabled()) {logger.error("Stack trace", new Exception("Stack trace"));}}}public static void error(String category, Object... info) {if (com.zzxy.common.jdbcspy.SpyConfiguration.isCategoryEnabled(category)) {StringBuilder sb = new StringBuilder(category);if (info != null) {Object[] var3 = info;int var4 = info.length;for(int var5 = 0; var5 < var4; ++var5) {Object element = var3[var5];sb.append(" | ").append(element);}}logger.error("{}", filter(sb.toString()));logger.error("sql stack trace", new Exception("sql stack trace"));}}private static String filter(String text) {text = replace(EMAIL_PATTERN, text, "$1***$3");text = replace(PHONE_PATTERN, text, "$1****$3");text = replace(ID_PATTERN, text, "$1**********$6$7");text = replace(ID_PATTERN, text, "$1**********$6$7");text = replace(XM_PATTERN, text, "XM='***'");text = replace(MC_PATTERN, text, "MC='***'");text = replace(ZJMC_PATTERN, text, "ExpertName='***'");return text;}private static String replace(Pattern pattern, String text, String replacement) {Matcher m = pattern.matcher(text);return m.replaceAll(replacement);}}

http://www.dtcms.com/a/363521.html

相关文章:

  • web自动化测试(selenium)
  • RK-Android15-WIFI白名单功能实现
  • 一次别开生面的Java面试
  • Servlet基础
  • Redisson分布式锁会发生死锁问题吗?怎么发生的?
  • Aurobay EDI 需求分析:OFTP2 与 EDIFACT 驱动的汽车供应链数字化
  • UniApp 实现搜索页逻辑详解
  • uniapp H5预览图片组件
  • 年轻教师开学焦虑破解:从心出发,重构健康工作生活新秩序
  • uni-app 布局之 Flex
  • 第一讲、Kafka 初识与环境搭建
  • ImageMagick命令行图片工具:批量实现格式转换与压缩,支持水印添加及GIF动态图合成
  • windows系统离线安装Ollama、创建模型(不使用docker)、coze调用
  • 51c大模型~合集177
  • Swift 解法详解:LeetCode 369《给单链表加一》
  • 研发团队缺乏统一文档模板怎么办
  • 苹果开发中什么是Storyboard?object-c 和swiftui 以及Storyboard到底有什么关系以及逻辑?优雅草卓伊凡
  • 【后端】Docker 常用命令详解
  • 构建企业级区块链网络:基于AWS EC2的弹性、高可用解决方案
  • 2025软件测试面试热点问题,3天刷完你的软件测试就牛了
  • 不同编译器之间代码转换
  • Java学习笔记-零基础学MySQL(二)
  • QT C++传递 map 给qml 中访问的两种方式
  • 深度学习容器化部署
  • Nginx 调度算法全解析:从基础到高级的负载均衡策略
  • HOW - 在浏览器下载一个 Excel 表格文件
  • Qt Demo(3) 之 deepseek 帮我写的关于图像显示的小界面
  • 漫画短剧小程序系统开发:从0到1的核心架构与思路
  • Redis 缓存雪崩实战:从监控告警到3层防护的完整修复
  • 【读论文】美团开源MOE大模型LongCat-Flash