一、今年公司成立了安全部门团队,开始针对公司内部项目涉及到的数据要进行脱敏处理,要求对姓名,电话,身份证号码等用户敏感数据入库加密,一开始第一想到的在慕课网学到的AES对称散列加密,但是在实践过程中发现AES每次加密得到的密文不一致这也导致数据唯一性校验没有任何用。以及模糊搜索也会使用不了,也想base64搞下算了,但是这也安全团队那关是过不了的,经过多处查询资料发现,MySQL自带AES的加解密函数AES_DECRYPT() ,AES_ENCRYPT(),话不多说上案列。
MySQL篇:
加密的SQL语句
INSERT INTO `tablea`(`classID`, `stuName`) VALUES ('B', HEX(AES_ENCRYPT('huang','SecretKey')));
[SecretKey]是秘钥约定好的后面都是一样不在赘述,AES_ENCRYPT()函数加密后是二进制,使用HEX函数转化成十六进制字符串;(ps:直接将加密后的串存入char/varchar/text类型中,在做字符转换的时或空格被删除时,可能会带来潜在的影响。所以必须使用HEX转换十六进制)
执行结果:
模糊搜索SQL
SELECT * FROM ta