用户私密信息如何加密存储
数据库加密是计算机系统对信息进行保护的一种最可靠的方法。它利用密码技术对信息进行加密,实现信息屏蔽,从而起到保护信息安全的作用。对数据库中的数据进行加密,可以防止数据在存储和传输过程中失密
数据库加密技术属于主动防御机制,可以防止明文存储引起的数据泄密、突破边界防护的外部黑客攻击以及来自内部高权限用户的数据窃取,从根本上解决数据库敏感数据泄漏问题
数据库加密存储过程的重要性
数据库中存储的数据往往具有很高的敏感度,例如用户的密码、个人隐私信息等等。如果数据库的管理员不能保证数据的安全,将会给用户和企业带来不可估量的损失。因此,对数据库中的数据进行加密存储是至关重要的
哪些信息要加密存储
虽然理论上所有存储在数据库中的数据都应该被加密,但是出于性能和实用性的考虑,通常会优先加密以下类型的信息:
1. 个人身份信息(PII):如姓名、地址、社会保险号、驾驶执照号等
2. 财务信息:包括银行账户信息、信用卡号、交易记录等
3. 健康信息:如病历记录、治疗信息、健康保险信息等,特别是在遵守HIPAA等法规的环境中
4. 商业秘密和知识产权:如未公开的财务数据、策略计划、专利申请资料等
5. 登录凭证:如密码、密钥、令牌等,这些信息若被泄露可能直接导致未授权访问
常见的数据库加密方式
在数据库中,常见的加密方式包括:
- 对称加密:使用相同密钥的加密算法,加密速度快,但密钥不易管理
- 非对称加密:使用公钥和私钥的加密算法,安全性高,但加密速度较慢
- 哈希加密:将原始数据通过哈希函数转换成固定长度的字符串,不可逆,但容易遭受字典攻击
加密存储过程的实现步骤
对于数据库中敏感的数据,可以通过以下步骤进行加密存储过程的实现:
- 将原始数据进行加密处理
- 生成加密后的数据并存储到数据库中
- 当需要查询原始数据时,在查询语句中对数据进行解密处理
需要注意的问题
在使用加密存储过程时,需要注意以下问题:
- 要保证加密算法的安全性,不能选择容易被破解的加密算法
- 要合理地使用加密算法,避免加密后的数据长度过长,影响数据库的性能
- 要对密钥进行管理,保证密钥的安全性
- 要进行数据备份,防止因为加密算法或密钥丢失而导致的数据无法恢复的情况
项目中的加密技术选型
在大麦网中需要加密的私密信息有用户手机号、购票人证件号,下面来介绍是如何将这些信息进行加密存储的
由于大麦网使用了ShardingSphere来实现分库分表,而且ShardingSphere提供了数据加密存储的功能,所以直接按照ShardingSphere的加密规则来配置
项目实际加密流程
引入 ShardingSphere 的相关依赖
<properties>
<shardingsphere.version>5.3.2</shardingsphere.version>
</properties>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core</artifactId>
<version>${shardingsphere.version}</version>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
用户项目相关配置:
spring:
datasource:
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
url: jdbc:shardingsphere:classpath:shardingsphere-user.yaml
shardingsphere-user.yaml配置:
rules:
# 加密规则
- !ENCRYPT
tables:
# d_user表
d_user:
columns:
# 对mobile列进行加密
mobile:
# 密文列mobile
cipherColumn: mobile
# 自定义的加密算法
encryptorName: user_encryption_algorithm
# 对password列进行加密
password:
# 密文列password
cipherColumn: password
# 自定义的加密算法
encryptorName: user_encryption_algorithm
# 对id_number列进行加密
id_number:
# 密文列id_number
cipherColumn: id_number
# 自定义的加密算法
encryptorName: user_encryption_algorithm
# d_user_mobile表
d_user_mobile:
columns:
# 对mobile列进行加密
mobile:
# 密文列id_number
cipherColumn: mobile
# 自定义的加密算法
encryptorName: user_encryption_algorithm
# d_ticket_user表
d_ticket_user:
columns:
# 对id_number列进行加密
id_number:
# 密文列id_number
cipherColumn: id_number
# 自定义的加密算法
encryptorName: user_encryption_algorithm
encryptors:
# 使用SM4算法
user_encryption_algorithm:
type: SM4
props:
sm4-key: d3ecdaa11d6ab89e1987870186073eaa
sm4-mode: CBC
sm4-iv: 1afc7fdce9ebc393f693cd3d23e35ed2
sm4-padding: PKCS7Padding
props:
# 打印真实sql
sql-show: true
- 点赞
- 收藏
- 关注作者
评论(0)