一 、应用场景
在开发一些项目的时候,往往很常联系上用户的真实姓名,身份证号码这样的敏感信息 。我们不想把真实数据暴露到某些地方,像客户端上的获奖用户信息,甚至是数据库。但是在做其他业务的时候又需要用到这些数据,所以我们不能使用类似于md5的加密算法,因为这类算法是不可逆的。
二、MySql的加密函数
其实这类需求是非常简单就可以实现的,如果你了解mysql的加密函数:
1、AES_ENCRYPT和AES_DECRYPT:
语法: 加密 aes_encrypt(str,key)
解密 aes_decrypt(str,key)
-->str:要解密或要加密的字符 key:自定义秘钥
aes_encrypt函数返回的是自定秘钥key对字符串str利用高级加密标准(AES)算法加密后的结果,结果是一个二进制的字符串,以BLOB类型存储。
aes_decrypt函数则是对AES方式加密的数据进行解密,若检测到无效数据或不正确的填充,函数会返回null。
这种加密方式也是MYSQL中最普遍使用,而且最安全的加密函数。
2. ENCODE 和 DECODE
这种方式跟第一种方法,使用的方式是一样的,也是通过自定义的密钥对数据进行加密,返回一个二进制的字符串,以BLOB类型存储。只要使用正确的秘钥进行解密即可。但是这种方式没有使用到AES加密算法,所以没有那么安全。
3.ENCRYPT
使用UNIX crypt()系统加密字符串, encrypt(str,salt)函数接收要加密的字符串和用于加密过程的salt(一个可以确定唯一口令的字符串)。但是这函数在Windows上不可用。
三、 敏感字加密
1、 在任意一个 .properties配置文件,确定一个key 例:
2、在service中使用@Value标签将值引入
@Value("msg.timeout")
private String key;
3、将key作为参数调用mapper
userInfoMapper.updateByPrimaryKey(userInfo,key);
4、mapper
int updateByPrimaryKey(@Param("record") UserInfo record, @Param("key") String key);
5、在mapper配置文件中,只需要使用aes_encrypt(str,key),方式就可以了。(记得把mysql中这一列的类型改为blob)
6、查询的时候也是将key传入,使用aes_decrypt(Str,key)解码既可。