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

Logo

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

更多推荐