PHP + MySQL的AES加密解密(数据脱敏)

一、今年公司成立了安全部门团队,开始针对公司内部项目涉及到的数据要进行脱敏处理,要求对姓名,电话,身份证号码等用户敏感数据入库加密,一开始第一想到的在慕课网学到的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	tablea WHERE AES_DECRYPT( UNHEX( stuName ), 'SecretKey' ) LIKE '%huang%';

执行结果:

PHP端操作篇:

加密语法

echo bin2hex(base64_decode(openssl_encrypt('MyData','aes-128-ecb', 'SecretKey')));

执行结果:

你会发现密文中和SQL里的大写不一致,Mysql模糊查询默认是不区分字母大小写

解密语法

echo openssl_decrypt(base64_encode(hex2bin('e7280e4c2c3ae80e855d4f7be37a9213')), 'aes-128-ecb', 'SecretKey');

执行结果:

 

总结:MySQL的AES加密和上面的PHP端AES都是一样的加密,可以在程序端入库数据的时候对数据处理,增加数据库的操作时效和性能,解密的时候需要模糊搜索在使用MySQL的函数进行查询即可;

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_34701838

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值