mysql对敏感字段加密
SQL加密敏感数据
·
需求:对用户表的 id_card 加密存储
表结构:
CREATE TABLE `test_user` (
`user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`id_card` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id_card`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
其中,id_card 是主键 key。
需要使用到的函数:HEX(), UNHEX(), AES_ENCRYPT(), AES_DECRYPT()。
HEX():十六进制化函数。
AES_ENCRYPT(str,key_str):加密函数。其中,str是需要加密的内容,key_str是秘钥,可以是随意的字符串,自己设定。
AES_DECRYPT(crypt_str,key_str):解密函数。其中,crypt_str是需要解密的内容,key_str是秘钥,需要使用和加密函数一样的秘钥才能解密成功。
插入数据SQL:(其中,"AABBCCDD" 是自定义的秘钥串)
INSERT INTO test_user ( user_name, id_card )
VALUES
( '张学友', HEX( AES_ENCRYPT ( '450521199900000000', 'AABBCCDD' ) ) );
查询SQL:
SELECT
user_name,
AES_DECRYPT( UNHEX( id_card ), 'AABBCCDD' )
FROM
test_user;

条件查询SQL:
SELECT
user_name,
AES_DECRYPT( UNHEX( id_card ), 'AABBCCDD' )
FROM
test_user
WHERE
id_card = HEX( AES_ENCRYPT ( '450521199900000000', 'AABBCCDD' ) );

至此,数据库中保存的就是加密的字符串了,如果拿不到秘钥,查询到的是一串密文。可以有效防止数据泄密。

修改旧表中未加密的数据:
UPDATE test_user
SET id_card = HEX( AES_ENCRYPT ( id_card, 'AABBCCDD' ) );
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)