mysql对敏感字段加密

本文详细介绍了如何使用HEX()和AES_ENCRYPT()函数在MySQL中对用户表的id_card字段进行加密存储,确保数据安全,包括插入、查询及更新旧数据的SQL操作,并强调了秘钥在解密过程中的关键作用。
摘要由CSDN通过智能技术生成

需求:对用户表的 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' ) );

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值