需求对敏感信息进行加密处理防止暴库
1.加密后的数据如何显示?模糊处理
2.搜索如何进行模糊搜索等?
3.加密后如何进行解密
加密的方式有哪些?
1.单向加密
不可逆的这种,比如密码,特殊的组合后可以进行MD5。每次进行加密判断无需解密。
2.对称加密算法
算法公开、计算量小、加密速度快、加密效率高、可逆
算法: 在对称加密算法中常用的算法有:[DES](http://baike.baidu.com/view/7510.htm)、[3DES](http://baike.baidu.com/view/350958.htm)、TDEA、[Blowfish](http://baike.baidu.com/view/2208941.htm)、RC2、RC4、[RC5](http://baike.baidu.com/view/734720.htm)、[IDEA](http://baike.baidu.com/view/92629.htm)、SKIPJACK、AES等。不同算法的实现机制不同,可参考对应算法的详细资料
相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准
3.RSA加密(非对称加密算法)
本文主要站在使用的角度来处理
如何解决问题?
MySQL中AES_ENCRYPT('密码','钥匙')函数可以对字段值做加密处理,AES_DECRYPT(表的字段名字,'钥匙')函数解密处理
使用该AES_ENCRYPT('密码','钥匙')函数进行加密之后需要使用HEX()转成十六进制,存入数据库,取出使用 用UNHEX()函数取出。
注意:可以使用HEX 存储也可以不使用,如果不使用的话字段的排序为 latin1_general_ci 长度256即可(由于我存储的手机号)
上SQL
//查询的时候
select *,AES_DECRYPT('phone_encrypt','abc') as phone_encrypt from `user_info` where `phone_encrypt` = AES_ENCRYPT(18510238660,'abc') and `status` = 0 limit 1
//插入的时候
insert into `user_info` (`name`, `realname`, `phone`, `phone_encrypt`) values ('学员22114426', '', '185****8660', AES_ENCRYPT(18510238660,'abc'))