我们存储用户信息等敏感数据的时候, 出于安全考虑通常需要加密存储,可是在用户信息统计的时候,难免又要支持模糊搜索,这时候该怎么办呢。
如果你的数据库是mysql的话比较容易解决,mysql自带函数可以加解密并且支持模糊搜索。
AES_ENCRYPT函数和AES_DECRYPT,需要注意的是,加密后的字段需要用blob做存储,如果用varchar存储会报1366错误。
使用例子
-- 先拷贝一张表出来
insert into sys_user_copy1 (select * from sys_user)
-- 对拷贝出来的表,用户名称做加密处理
update sys_user_copy1 set user_name = AES_ENCRYPT(user_name,"start")
-- 查询加密后的表信息
select * from sys_user_copy1
-- 对比两张表数据
select AES_DECRYPT(user_name,"start") user_name from sys_user_copy1
select AES_ENCRYPT(user_name,"start") user_name from sys_user;
-- 做模糊搜索
select AES_DECRYPT(user_name,"start") from sys_user_copy1 where AES_DECRYPT(user_name,"start") like '%d%'