闽公网安备 35020302035485号
今天就给大家分享下,MySql数据加密的解决方案、以及如何解决以上的问题。
CREATE TABLE `tab_aes` (`data` VARCHAR(250) NULL DEFAULT NULL COLLATE 'utf8_general_ci')COMMENT='数据加密存储表'COLLATE='utf8_general_ci'ENGINE=InnoDB;2、插入数据
INSERT INTO tab_aes
VALUES( TO_BASE64( AES_ENCRYPT('要加密的内容','秘钥') ) );
TO_BASE64函数把加密的二进制转换为Base64,方便我们查看。
SELECT CAST( AES_DECRYPT( FROM_BASE64(tab_aes.data), '秘钥') AS CHAR CHARACTER SET utf8 ) FROM tab_aes解密后,要用CAST把字符串编码转为UTF8,否则返回是乱码。
SELECT CAST( AES_DECRYPT( FROM_BASE64(tab_aes.data), '秘钥') AS CHAR CHARACTER SET UTF8 ) FROM tab_aes WHERE CAST( AES_DECRYPT( FROM_BASE64(tab_aes.data), '秘钥') AS CHAR CHARACTER SET UTF8 ) LIKE '要加密%'优点
CREATE TABLE `tab_aes` ( `data` VARCHAR(250) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `data_ext` VARCHAR(250) NULL DEFAULT NULL COLLATE 'utf8_general_ci', INDEX `data_ext` (`data_ext`) USING BTREE ) COMMENT='数据加密存储表' COLLATE='utf8_general_ci' ENGINE=InnoDB ;比如,要加密的内容为:123456789,字段data_ext取字段data,开头和结尾3个字符存储,储存格式为:AES(123) , AES(789),插入数据的sql语句如下:
INSERT INTO tab_aes VALUES( TO_BASE64( AES_ENCRYPT('要加密的内容','秘钥')),
CONCAT(TO_BASE64( AES_ENCRYPT('要加密','秘钥')), ',', TO_BASE64( AES_ENCRYPT('内容','秘钥')))
);
存储结果如下:
SELECT CAST( AES_DECRYPT( FROM_BASE64(tab_aes.data), '秘钥') AS CHAR CHARACTER SET UTF8 ) FROM tab_aesWHEREtab_aes.data_ext LIKE CONCAT(TO_BASE64(AES_ENCRYPT(('要加密'),'秘钥')),'%')AND tab_aes.data_ext LIKE CONCAT('%',TO_BASE64(AES_ENCRYPT(('内容'),'秘钥')))AND tab_aes.data_ext LIKE CONCAT(TO_BASE64(AES_ENCRYPT(('要加密'),'秘钥')),'%', TO_BASE64(AES_ENCRYPT('内容','秘钥')));
通过Explain分析结果,该查询sql语句索引是生效的。