@Tyhj
2019-03-11T09:52:57.000000Z
字数 943
阅读 1202
数据加密
为了数据安全经常会使用到加密技术,学习了一下Android中会用到的加密方法和场景
在数据传输过程中,数据可能被拦截了导致数据泄露,为了数据的安全就必须对数据进行加密;数据的加密最基础的一般分为两种,对称加密和非对称加密;
指的就是加、解密使用的同是一串密钥,对称加密只有一个密钥作为私钥。
常见的对称加密算法:DES,AES等;
在APP使用的话,应该就是把秘钥保存在APP端和服务端,APP使用秘钥加密数据以后发送到服务端,服务端对数据进行解密,微信支付的签名算法应该就是这样做的;
使用比较简单,速度也比较快,而且秘钥也不会被传输;
密码安全性低一点,每个使用者都持有秘钥,可能会被通过逆向客户端获取,一旦泄露数据就会被破解或篡改;
也有相应的办法,如App加固或把密钥/算法硬编码在so文件中等;这样就更进一步地提高了逆向与解密的难度和成本了。
指的是加、解密使用不同的密钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。反之,私钥加密的信息,只有公钥才能解密。
常见的如RSA、Rabin等
APP上使用的话,把公钥保存在APP端,服务端保存私钥,APP加密后传输数据到服务端,因为只有私钥可以解密,所以数据是不会被破解的,就算APP端的公钥泄漏,数据也不会被解密;
使用也比较简单,但是加解密速度比较慢,性能资源占用较大,而且只有一对秘钥的话,数据返回的时候是没办法进行加密的
混合加密就是结合上面两者的优点,并不是简单的重复加密;非对称加密是比对称加解密慢非常多的,速度相差大概100倍;要传输的具体数据一般还是比较多的,肯定不能用公钥来加密的,肯定是使用对称加密,而对称加密的秘钥又存在安全问题,所以一般是动态生成对称加密的秘钥,然后通过秘钥加密传输的数据,然后通过公钥来加密这个秘钥,一起传输到服务器,服务器使用私钥解密出对称加密的秘钥,使用秘钥来解密,因为对称加密的秘钥比较简单所以,使用非对称加解密也比较快;对称加密的秘钥是随机生成的,而且使用非对称加密传输,也保证了安全性;
上面只是一种常见的做法,还有其他方法来实现混合加密,原理都是使用对称加密加密数据,并且用非对称加密来保证对称加密秘钥的安全生成和传输;