Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >敏感信息加密存储

敏感信息加密存储

作者头像
用户10136162
发布于 2023-10-31 00:17:02
发布于 2023-10-31 00:17:02
1K00
代码可运行
举报
文章被收录于专栏:Eliauk的小窝Eliauk的小窝
运行总次数:0
代码可运行

1、需求背景

安全控制一直是治理的重要环节,数据加密属于安全控制的范畴。 无论对互联网公司还是传统行业来说,数据安全一直是极为重视和敏感的话题。 数据加密是指对某些敏感信息通过加密规则进行数据的变形,实现敏感隐私数据的可靠保护。 涉及客户安全数据或者一些商业性敏感数据,如身份证号、手机号、卡号、客户号等个人信息按照相关部门规定,都需要进行数据加密。

对于数据加密的需求,在现实的业务场景中存在如下情况:

  • 密码样式的文本:安全部门规定需将涉及用户敏感信息,例如银行、手机号码等进行加密后存储到数据库,在使用的时候再进行解密处理。

在真实业务场景中,相关业务开发团队则往往需要针对公司安全部门需求, 自行实行并维护一套加解密系统。 而当加密场景发生改变时,自行维护的加密系统往往又面临着重构或修改风险。 此外,对于已经上线的业务,在不修改业务逻辑和 SQL 的情况下,透明化、安全低风险地实现无缝进行加密改造也相对复杂。

2、项目实战

1、引入ShardingSphere

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-jdbc-core</artifactId>
    <version>5.3.2</version>
</dependency>

2、新增加密配置

application.yaml 配置文件修改配置,将数据库驱动变更为 ShardingSphere Driver 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
    datasource:
        driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
        url: jdbc:shardingsphere:classpath:shardingsphere-config.yaml

并配置 shardingsphere-config.yaml 相关配置。为了方便大家理解,这篇文章只讲敏感数据信息加密存储

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 配置数据源,底层被 ShardingSphere 进行了代理
dataSources:
  ds_0:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://127.0.0.1:3306/12306_user_0?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: root

rules:
  # 数据加密存储规则
  - !ENCRYPT
    # 需要加密的表集合
    tables:
      # 用户表
      t_user:
        # 用户表中哪些字段需要进行加密
        columns:
          # 身份证字段,逻辑字段,不一定是在数据库中真实存在
          id_card:
            # 身份证字段存储的密文字段,这个是数据库中真实存在的字段
            cipherColumn: id_card
            # 身份证字段加密算法
            encryptorName: common_encryptor
          phone:
            cipherColumn: phone
            encryptorName: common_encryptor
          mail:
            cipherColumn: mail
            encryptorName: common_encryptor
          address:
            cipherColumn: address
            encryptorName: common_encryptor
        # 是否按照密文字段查询
        queryWithCipherColumn: true
    # 加密算法
    encryptors:
      # 自定义加密算法名称
      common_encryptor:
        # 加密算法类型
        type: AES
        props:
          # AES 加密密钥
          aes-key-value: d6oadClrrb9A3GWo
props:
  sql-show: true

3、最终效果如下

当配置好之后,执行对于的插入逻辑,新插入一条用户信息,在应用程序里还是明文,经过 ShardingSphere 代理后,存储数据库时,就已经是密文的了。可以通过Stream-Query来配置打印执行sql

原始SQL :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert into t_user (id_card, phone, mail, address) values ('34020xx023081xx338', '1x60111xx983', 'mading@axxche.org', 'xx东城x');

代理后SQL :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert into t_user (id_card, phone, mail, address) values ('YUvr+8Xf17VCgGonU2WXqmKuhB5FMazUEbh3y+h0B38=', 'MZObk+5TeYPLHtP2A6+aiw==', 'vX/5iWTyfAvMJMt+ioipj9vd6cnZ4rz4qKBAXQ9C9oU=', 'vX/5iWTyfAvMJMt+ioipj9vd6cnZ4rz4qKBAXQ9C9oU=');

注:

ShardingSphere 在执行查询语句时,如果涉及到相关加密表,会自动将加密数据转换为明文数据,也就是会把 YUvr+8Xf17VCgGonU2WXqmKuhB5FMazUEbh3y+h0B38= 转换为 34020xx023081xx338.由此形成加密敏感信息落库闭环。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Boot yml 配置敏感信息加密
在application.properties或者application.yml中设置如下内容:
闻说社
2025/07/09
1250
Spring Boot yml 配置敏感信息加密
Spring Boot yml 配置敏感信息加密
在application.properties或者application.yml中设置如下内容:
每周聚焦
2025/07/15
1220
Spring Boot yml 配置敏感信息加密
聊聊 Sharding-JDBC 数据脱敏
安全控制一直是治理的重要环节,数据脱敏属于安全控制的范畴。对互联网公司、传统行业来说,数据安全一直是极为重视和敏感的话题。
码猿技术专栏
2023/05/01
1.6K0
聊聊 Sharding-JDBC 数据脱敏
手把手教你ShardingSphere和Mybatis拦截器实现特殊字段动态切换加密
在国家对个人隐私越来越看重的现在,很多用户的重要数据都需要加密存储,比如手机号、真实姓名、联系地址等等,但是可能由于系统建设时间久,在建设初期没有考虑这么全面,数据在数据库中都是明文存储。那么如何将数据由明文存储平滑的切换为密文存储呢?
业余草
2020/10/26
2.7K0
敏感数据,“一键脱敏”,Sharding Sphere 完美搞定
在真实业务场景中,数据库中经常需要存储某些客户的关键性敏感信息如:身份证号、银行卡号、姓名、手机号码等,此类信息按照合规要求,通常需要实现加密存储以满足合规要求。
搜云库技术团队
2021/08/20
1.5K0
如何用SpringBoot整合Sharding Sphere实现数据脱敏
在真实业务场景中,数据库中经常需要存储某些客户的关键性敏感信息如:身份证号、银行卡号、姓名、手机号码等,此类信息按照合规要求,通常需要实现加密存储以满足合规要求。
程序员小假
2025/06/06
1610
如何用SpringBoot整合Sharding Sphere实现数据脱敏
Sharding-JDBC数据库字段加解密透明化方案
近期,博主公司应安全审计要求,需要对数据库中的用户关键信息做加密处理,这样,即使生产数据被脱裤,也不会泄露用户的敏感信息,在做了初步的需求归纳和功能分析后,我们制定了简单的开发方案,将需要加解密的字段的元数据信息通过配置或注解的方式标记出来,尝试使用hibernate的filter和Interceptor针对用户sql做拦截,做到透明化加解密。但是这个方案很快被否决了,查询结果集没法通过这种方式达到目的。然后将方向转向了代理JDBC驱动的方式。在摸索JDBC代理方案过程中发现,业界已经有了非常成熟的针对数据库字段透明化加解密的方案,而且和我们场景以及方案非常相符,整体方案如下:
kl博主
2023/11/18
1.1K0
Sharding-JDBC数据库字段加解密透明化方案
ShardingSphere实践(7)——数据加密
        安全控制一直是治理的重要环节,数据加密属于安全控制的范畴。无论对互联网公司还是传统行业来说,数据安全一直是极为重视和敏感的话题。数据加密是指对某些敏感信息通过加密规则进行数据的变形,实现敏感隐私数据的可靠保护。涉及客户安全数据或者一些商业性敏感数据,如身份证号、手机号、卡号、客户号等个人信息按照相关部门规定,都需要进行数据加密。
用户1148526
2022/06/14
2.1K0
ShardingSphere实践(7)——数据加密
​SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密
在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号、银行卡号、手机号、工资等信息进行加密存储,实现真正意义的数据混淆脱敏,以满足信息安全的需要。
潘志的技术笔记
2024/07/22
2670
​SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密
【进阶之路】基于ShardingSphere的线上业务数据脱敏解决方案
.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1{font-size:30px;margin-bottom:5px}.markdown-body h2{padding-bottom:12px;font-size:24px;border-bottom:1px solid #ececec}.markdown-body h3{font-size:18px;padding-bottom:0}.markdown-body h4{font-size:16px}.markdown-body h5{font-size:15px}.markdown-body h6{margin-top:5px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:100%}.markdown-body hr{border:none;border-top:1px solid #ddd;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background-color:#fff5f5;color:#ff502c;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre>code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{text-decoration:none;color:#0269c8;border-bottom:1px solid #d1e9ff}.markdown-body a:active,.markdown-body a:hover{color:#275b8c}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){background-color:#fcfcfc}.markdown-body td,.markdown-body th{padding:12px 7px;line-height:24px}.markdown-body td{min-width:120px}.markdown-body blockquote{color:#666;padding:1px 23px;margin:22px 0;border-left:4px solid #cbcbcb;background-color:#f8f8f8}.markdown-body blockquote:after{display:block;content:""}.markdown-body blockquote>p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body
南橘
2021/04/02
8620
【进阶之路】基于ShardingSphere的线上业务数据脱敏解决方案
50行代码,搞定敏感数据读写!
在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号、银行卡号、手机号、工资等信息进行加密存储,实现真正意义的数据混淆脱敏,以满足信息安全的需要。
Java极客技术
2022/12/02
1.2K0
50行代码,搞定敏感数据读写!
一种加密框架的技术实现
对互联网公司来说,数据安全一直是极为重视和敏感的话题。涉及客户安全数据或者一些商业性敏感数据,如身份证号、手机号、卡号、客户号等个人信息如果被泄露出去,就会引发严重的数据安全风险。
卡卡罗特杨
2022/05/28
1.8K4
Sharding-Proxy的基本功能使用
Sharding-Proxy是一个分布式数据库中间件,定位为透明化的数据库代理端。作为开发人员可以完全把它当成数据库,而它具体的分片规则在Sharding-Proxy中配置。它的整体架构图如下:
小忽悠
2020/07/20
1.7K0
Sharding-Proxy的基本功能使用
YashanDB的数据加密功能,保护敏感信息的方法
在现代数据管理环境中,保护敏感信息是一个关键问题。数据库中的敏感数据,如个人身份信息、财务数据和医疗记录,若遭受外部攻击或内部泄露,将给企业带来显著的法律风险和经济损失。为了解决这一问题,数据加密技术应运而生。YashanDB作为一个高性能的数据库系统,提供了一系列的数据加密功能,以确保用户数据的安全性和私密性。本文将深入探讨YashanDB的数据加密机制及其核心优势。
数据库砖家
2025/07/12
680
顶级企业如何用数据脱敏保护用户隐私!
ShardingSphere提供数据访问安全性:通过数据脱敏,完成对敏感数据的安全访问。本文介绍ShardingSphere数据脱敏功能。
JavaEdge
2025/06/01
1630
顶级企业如何用数据脱敏保护用户隐私!
惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密|原创
出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方。
andyxh
2020/04/10
1.3K0
惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密|原创
Springboot 项目配置文件敏感信息加密
2.找到jar 找到所下载的位置, 如果使用的是idea, 默认在 C:\Users\Administrator\.m2\repository\org\jasypt\jasypt\1.9.2下
时间静止不是简史
2022/01/05
7720
Springboot 项目配置文件敏感信息加密
java进阶|MyBatis系列文章(八)代码生成器
感觉自己写的内容越来越相笔记了,哈哈哈,惭愧,就当做笔记看吧,主要还是给自己一个总结,避免以后遇到的时候方便查看。
码农王同学
2020/04/27
5890
敏感数据,实现“一键脱敏”!
在真实业务场景中,数据库中经常需要存储某些客户的关键性敏感信息如:身份证号、银行卡号、姓名、手机号码等,此类信息按照合规要求,通常需要实现加密存储以满足合规要求。
Java旅途
2021/10/14
2.1K0
Java技术:Spring Boot 配置文件敏感信息加密
使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。
小明互联网技术分享社区
2022/02/17
1.2K0
Java技术:Spring Boot 配置文件敏感信息加密
推荐阅读
相关推荐
Spring Boot yml 配置敏感信息加密
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验