最近在设计一个给IOS和Android提供接口的项目框架,在接口安全上准备使用常规的加密技术,确保在非法访问接口的情况下拿到的数据一时半会也没用。
查了相关的资料,用的最多的几种加密算法,DES、AES、3DES等,考虑到手机端的兼容,先用了DES。但我遇到一个现象后,让我决定放弃DES,不知道有没有大神也遇到过,就是我用DES加密后,再用AES加密DES解密后的内容。拿到密文后使用AES反过来解密,结果AES一次解密后就得到了两次加密前的明文。为了排除是内存的问题,我特地在A机器上加密,B机器上解密,结果还是坑爹的一样。为了节省时间就没有细细的研究了,有时间了再细细研究。
最后决定选用AES,密钥长度为128位作为加解密工具,在与前端联调的发现了个问题,就是服务器加密的数据,客户端无法解密。经过研究发现,是由于IOS加密填充方式是PKCS7Padding和而服务器使用的加密填充方式是PKCS5Padding,只支持56位密钥。查询资料后发现使用AES密钥为256位加密后在客户端可以正常的解密。但有个问题,就是我使用的JDK1.6自带的security是不支持256位的。这个使用可以使用Bouncy castle,它支持PKCS7Padding的64位算法。
下面说说具体的实现办法:
1、声明密钥算法
publi