前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于SQL的数据AES加解密

基于SQL的数据AES加解密

原创
作者头像
保持热爱奔赴山海
发布2024-09-26 11:16:06
1120
发布2024-09-26 11:16:06
举报
文章被收录于专栏:数据库相关

MySQL

在MySQL里,可以使用AES_ENCRYPT和AES_DECRYPT来实现数据的加解密。

如下例子:

代码语言:txt
复制
对于原始是明文的情况,可以使用下面的方法 :
-- 原始内容如下:
[test]> select * from t1;
+----+--------+---------------------+
| id | remark | create_time         |
+----+--------+---------------------+
|  7 | aaabbb | 2024-09-26 11:08:23 |
|  8 | aaa    | 2024-09-26 11:07:22 |
|  9 | aaabbb | 2024-09-26 11:07:30 |
+----+--------+---------------------+
3 rows in set (0.00 sec)

如果直接使用AES_ENCRYPT会发现数据是乱码的
[test]> select id,AES_ENCRYPT(remark, 'encryption key'),create_time from t1;
+----+---------------------------------------+---------------------+
| id | AES_ENCRYPT(remark, 'encryption key') | create_time         |
+----+---------------------------------------+---------------------+
|  7 | u�?�x�U��݄u3�                             | 2024-09-26 11:08:23 |
|  8 | ���P����/Y����_                                 | 2024-09-26 11:07:22 |
|  9 | u�?�x�U��݄u3�                             | 2024-09-26 11:07:30 |
+----+---------------------------------------+---------------------+
3 rows in set (0.00 sec)


[test]> select id,remark,TO_BASE64(AES_ENCRYPT(remark, 'encryption key')) as remark_encr,create_time from t1 ;
+----+--------+--------------------------+---------------------+
| id | remark | remark_encr              | create_time         |
+----+--------+--------------------------+---------------------+
|  7 | aaabbb | daYVP8d44FUY+JTdhHUzyg== | 2024-09-26 11:08:23 |
|  8 | aaa    | hIzbFlCSpcfJL1m58dvnXw== | 2024-09-26 11:07:22 |
|  9 | aaabbb | daYVP8d44FUY+JTdhHUzyg== | 2024-09-26 11:07:30 |
+----+--------+--------------------------+---------------------+
3 rows in set (0.00 sec)

解密
create table t1_encr select id,remark,TO_BASE64(AES_ENCRYPT(remark, 'encryption key')) as remark_encr,create_time from t1 ;
[test]> SELECT id,CAST(AES_DECRYPT(FROM_BASE64(remark_encr), 'encryption key') AS CHAR) AS remark,create_time FROM t1_encr;
+----+-----------+---------------------+
| id | remark    | create_time         |
+----+-----------+---------------------+
|  7 | aaa       | 2024-01-01 00:02:01 |
|  8 | aaabbb    | 2024-01-01 00:02:01 |
|  9 | aaabbbccc | 2024-01-01 00:02:01 |
+----+-----------+---------------------+
3 rows in set (0.00 sec)

注意: 上面的这种加解密有个缺点,只要DBA把慢查询的阈值调低(或者临时开启general_log) 即可抓取到秘钥内容,DBA有了秘钥后,就可以解出明文数据。

PG

在PG中,可以使用pgcrypto这个扩展来实现AES加解密。如下例子:

代码语言:txt
复制
-- 安装扩展
CREATE EXTENSION IF NOT EXISTS pgcrypto;

-- 加密
SELECT pgp_sym_encrypt('Hello, World!', 'my_secret_key', 'cipher-algo=aes256');

-- 解密
SELECT pgp_sym_decrypt('U2FsdGVkX1...', 'my_secret_key', 'cipher-algo=aes256');

注意

基于数据库函数或者扩展的加解密,实际上对安全需求高的场景下是不推荐使用的。

更推荐使用:

1、专用的秘钥管理器(例如云厂商的kms服务、或者开源的vault)

2、自研加解密的基础服务

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL
  • PG
  • 注意
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档