mysql内置加密函数对数据加密

1 目的

有些业务场景,数据库中的敏感数据需要存储为密文形式,这里使用mysql内置加密函数对数据进行加密。

2 加密算法

对称加密算法:AES

加密后数据转换为:十六进制

3 内置函数说明

函数说明
AES_ENCRYPT(字符串,秘钥)加密函数
AES_DECRYPT(字符串,秘钥)解密函数
HEX(二进制字符串)二进制转十六进制
UNHEX(十六进制字符串)十六进制转 二进制

4 加密、解密入口

自定义mysql函数。使用自定义函数进行加密和解密,当前需要更改算法的时候,只需要更改自定义函数即可。

如果数据库要求不能自定义函数,或者考虑对数据库性能的影响,可以在JAVA代码环节进行加密、解密的数据处理。

5 自定义加密、解密函数

5.1 加密函数

(1)函数定义

CREATE FUNCTION `ext_encrypt`(`info` varchar(100),`seacrt_key` varchar(20)) RETURNS varchar(100) CHARSET utf8
BEGIN
    RETURN HEX(AES_ENCRYPT(info,seacrt_key));
END

(2)使用

# 密钥为123456
# 加密结果为:6379779C5A736CAD203C4DD3D0A3CE7C
select ext_encrypt('abcd测试123','123456');

(3)场景

插入数据、更新数据

5.2 解密函数

(1)函数定义

CREATE FUNCTION `ext_decrypt`(`info` varchar(100),`seacrt_key` varchar(20)) RETURNS varchar(100) CHARSET utf8
BEGIN
    RETURN AES_DECRYPT(UNHEX(info),seacrt_key);
END

(2)使用

# 密钥为123456
# 解密密结果为:abcd测试123
select ext_decrypt('6379779C5A736CAD203C4DD3D0A3CE7C','123456');

(3)场景

返回查询结果、组装查询条件

6 说明

6.1 对加密后结果进行进制转换

为什么使用AES+HEX组合的方式,将加密后的数据转换为16进制后再存储,不直接存储加密后的数据

**因为:**AES加密后的数据为二进制,不可读,不便于查询出来后作为中间数据进行存储处理。因此将加密后的二进制数据转换为16进制后再进行存储。

直接用AES进行加密,结果如下:

# AES加密结果:cyw�Zsl� <M�У�|
select AES_ENCRYPT('abcd测试123','123456');
6.2 关于HEX的长度

加密后得到的密文,通过HEX函数转换为16进制后,会导致存储的数据长度比原始数据长很多浪费存储空间

这里可以考虑使用base32base64,将二进制转换为32位或64位,会大大减少转换后的字符串长度,减少对于数据库存储空间的浪费。

这里以转换为64进制为例:

(1)加密

# 加密,结果:Y3l3nFpzbK0gPE3T0KPOfA==
select TO_BASE64(AES_ENCRYPT('abcd测试123','123456'));

(2)解密

# 解密,结果:abcd测试123
select AES_DECRYPT(FROM_BASE64('Y3l3nFpzbK0gPE3T0KPOfA=='),'123456');

可见,同样的数据加密后,转换为不同进制,结果的长度不一样。

进制转换后结果
16进制HEX6379779C5A736CAD203C4DD3D0A3CE7C
64进制BASE64Y3l3nFpzbK0gPE3T0KPOfA==

如果从存储空间考虑,建议转换为64进制,两个进制转换上对于服务器性能加密速度上有一定的区别,可以自行测试。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值