
-- 创建user表,包含id、手机号加密字段(mobile)、以及用于加密的随机盐字段(salt)
CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`mobile` VARBINARY(255) COMMENT '加密后的手机号',
`salt` VARCHAR(255) COMMENT '随机盐,用于生成加密密钥',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='用户信息表';-- 使用UUID()生成随机盐值,并将其与固定密钥串联生成最终的加密密钥
SET @salt = UUID();
SET @key = CONCAT(@salt, 'MyKey1234567890');
INSERT INTO user(mobile,salt)
VALUES
(AES_ENCRYPT('13311111111', @key), @salt);
SET @salt = UUID();
SET @key = CONCAT(@salt, 'MyKey1234567890');
INSERT INTO user(mobile,salt)
VALUES
(AES_ENCRYPT('13599911111', @key), @salt);-- 使用存储的盐值与固定密钥串联来解密手机号
SELECT CONVERT(AES_DECRYPT(mobile, CONCAT(salt,'MyKey1234567890')) USING utf8) AS mobile FROM user;
-- 安装脱敏插件
mysql> INSTALL PLUGIN data_masking SONAME 'data_masking.so';
mysql> SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'data%';
-- 保留手机号的前3位和后2位,中间部分用'X'替代
SELECT mask_inner(CONVERT(AES_DECRYPT(mobile, CONCAT(salt,'MyKey1234567890')) USING utf8), 3, 2) AS mobile FROM user;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。