mysql对敏感字段加密

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

mysql对敏感字段加密_第1张图片

 条件查询SQL:

SELECT
	user_name,
	AES_DECRYPT( UNHEX( id_card ), 'AABBCCDD' )  
FROM
	test_user 
WHERE
	id_card = HEX( AES_ENCRYPT ( '450521199900000000', 'AABBCCDD' ) );

mysql对敏感字段加密_第2张图片

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

mysql对敏感字段加密_第3张图片

修改旧表中未加密的数据:

UPDATE test_user 
SET id_card = HEX( AES_ENCRYPT ( id_card, 'AABBCCDD' ) );

你可能感兴趣的:(mysql,数据库,sql,1024程序员节)