简述
在网络中传递数据时,我们多少都会做出一些加密操作,并非直接将明文数据在网络中传输,多数都会通过简单的对称加密操作,传递密文。这样做的好处可以避免在请求被抓包或者拦截的同时,将重要信息暴露给“敌人”,保证了用户的数据安全。
实际案例
最近在做公司接入百度API获取用户信息,百度提供的用户信息,采用了对称加密算法,进行了加密处理(虽然与微信采用了相同的加密方式,但是不同的是,百度加密的数据包含有补位字符需要移除后才会得到真实的数据)。使用百度提供的解密方式,本地解密成功,但是在公司测试环境上无法解密,查看日志后。发现发生了个如下异常:
经过排查和查阅,最终定位为JDK默认的解密工具问题(AES算法)只支持128位,百度的长度为192超出了范围。同时百度API也对此有说明:
本人开发时采用的JDK8-221的版本,不会出现类似问题,测试环境的JDK8-131存在上述问题。通过替换本地JDK为131后,复现了测试环境的问题,由此证明和JDK版本有关联。
解决方式有两种:
- 升级JDK。测试环境升级没有问题,可是线上发布同样需要升级,这就涉及到了大量的功能点和项目回归测试,代价较高!
- 替换 jar 包。按照官网的提示替换 /jre/lib/security 目录下的:
local_policy.ja
r 和US_export_policy.jar
(版本对应上噢~)。这追改做法不会涉及大量的项目回归和功能回归。推荐使用这种方式。