背景
因项目业务需求,在接口测试中发现了各种加密方法的使用。结合项目,就目前主要使用加密方式展开探讨。
我们对于密码、加密应该都略有了解。在一些谍战片里,我们高频的看到发出滴滴滴的电报声的发报机使用场景,各种使用着自己的约定的密文加密信息后传输。近代历史上,太平洋战争中知名的中途岛战役,有些说法是因为美军破获了日军的AF密码,了解了日军的行动,提前部署准备,情报的破解成了决定战争胜负的关键。更早之前则可以追溯到公元前约400年,古希腊雅典和斯巴达间的伯罗奔尼撒战争,因为斯巴达偶尔破解了波斯帝国欲让雅典和斯收达两败俱伤,坐收渔利的战略情报,改变作战方争,迅速击溃毫无妨备的波斯,然后回师征伐雅典,取得战争最后的胜利。
随着社会的发展,国家、地区、团体、个人之间的战争也由冷兵器->热兵器->机械化->信息化转变。所以只要竞争存在,那信息的保密性就会存在,所以我们的加密算法也不断演化优化。
常用算法
目前常用的加密算法有DES、AES、RSA、Base64编解码、MD5、SHA1等加密算法。DES和ASE都属于对称加密算法,AES可以理解成DES的进阶版。对称加密简单理解就是,使用同一个密钥加密和解密,密钥发送过程中有很大风险,加解密速度快(一般密钥比较小,小于256bit,如果密钥越大,加解密的时间越长。所以要从安全性和效率两方面去考虑)。密钥不公开但加密算法是公开的,56位DES加密算法如果用穷举法,则存在破译的可能性(出于安全要求,目前我司安全部门已不允许使用DES加密方法,所以在对称加密场景都是使用AES加密)。
对称加密算法使用模型如下:
(发送方的明文通过加密变成密文,在密文传过程中带着密钥,接收方收到密文和密钥后解密,得到明文。可以看到密钥在随着请求传输,虽然加解密速度快但有被截取的风险。)RSA加密算法是目前最有影响力的公钥加密算法,且被认为是最优秀的公钥方案之一。其原理就是AB两位交流沟通方都持有一对公私钥。公钥对外公开,私钥自己掌握。A向B发送消息时,使用B的公钥加密,B收到消息后使用手里的私钥解密。B向A发送消息同理。虽然非对称加密安全,但对比对称加密非常慢(因为公私钥很大,且解密方法复杂)。
RSA非对称加密算法模型如下:
(发送方使用接收方公开的公钥加密,接收方收到密文后,使用自己所持的私钥解密。可以看到传输过程都是密文,被截取后没有私钥也无法解密。但加解密公私,算法复杂,所以耗时间比较长。)Base64编解码是较常见的用于传输8bit字节代码的编码方式。其原理是把每三个8Bit的字节转换为四个6Bit的字节(3*8=4*6),然后后6Bit再添高两位,组成四个8Bit的字节。主要用来HTTP环境下传递较长的标识信息。比如身份信息核查返回回来的照片,我们就使用了Base64编解码方法。
其他一些加密方法暂时没有用到,没有研究,此处不做介绍。
加密选择
那么在我们的XX业务中,我们是怎么来合理的使用加密,使之安全又高效呢?其实业内大都用此成熟而聪明的方案:将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后就可以使用对称加密的密钥来查看信息了。也就是把钥匙放在更安全的箱子里,打开箱子拿到钥匙,去开更大的门(解密更大的数据)。
如一个常规的接口请求简单示意图如下:
(发送方将AES密钥通过RAS公钥加密,请求数据使用AES加密。接收方在收到请求后,首先用私钥解密了encodeKey,安全的得到AES对称加密密钥,再用密钥解密请求数据。这样保证了传输过程中AES密钥的安全同时RAS只对16位或者以上的AES密钥加解密,提高了加解密效率。)加解密实例
至于RSA非对称加密和AES对称加密方法,我们都可以在网上搜索到开源方法,直接使用即可。如下:
首先加载开源组件及方法RSAUtils.java
加密方法:
然后定义公钥rsa_publice_key和AES密钥aes_pulice_key值
RSAUtils.encrypt(aes_pulice_key,rsa_publice_key);即可赋值给encodeKey,得到AES密钥加密值。
解密方法:
RSAUtils.decrypt(responsData,aes_pulice_key);取到返回参数,再使用AES密钥解密。
从此次加解密的算法和历史故事了解到,加密史亦可看成经济发展史。互联网时代的信息共享也让人更加关注自己的隐私。也许更好的掌握了各种加密技术和核心,了解加密算法的真谛,在当前时代,我们的国家、企业、个人才能在信息安全的道理上越走越顺利。
网友评论