前言
加密算法在网络应用中越来越广,为了保证网络请求数据的安全,Android 网络请求中也越来越多的加入加密算法,本文主要是记录 RSA 和 AES 算法在 Android 中的应用
正文
一、 概念
1. RSA 算法
RSA 是 1977 年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用 RSA 加密的信息实际上是不能被解破的。
RSA 算法属于非对称加密算法,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey),公钥加密,私钥解密;私钥加密,公钥解密。
随机生成一对公钥和私钥,客户端拿公钥,服务端拿私钥。
2. AES 算法
该算法为比利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,结合两位作者的名字,以 Rijndael 为名投稿高级加密标准的甄选流程。
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称 Rijndael 加密法,
是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES。每次用的时候随机生成一个秘钥,用完之后销毁
二、 使用流程
1. 客户端和服务端用的 base64 加密类要一致,这个加密类是一个 jar 包,java 中有自带的 Base64 算法类,但是安卓中却没有,如果不统一 jar 包,解析要出错
|
|
2. 客户端使用示例代码
操作步骤:
客户端随机产生 AES 的密钥
对身份证信息(重要信息)进行 AES 加密
通过使用 RSA 对 AES 密钥进行公钥加密
|
|
其中,RSA 的秘钥和公钥是提前生成好的,例如:
|
|
Log 打印出来的结果大概是这样:
|
|
3. 服务端使用代码示例
操作步骤:
对加密后的 AES 密钥进行 RSA 私钥解密,拿到密钥原文;
对加密后的重要信息进行 AES 解密,拿到原始内容
|
|
三、 为什么要两种算法配合使用
上边的例子大概是:客户端加密向服务端请求数据,服务端解密的过程。
而这种过程完全用 RSA 加密也能做到,两种算法结合的原因就是:AES 加密算法的解密速度要比 RSA 快得多,大概100倍。
还有一个原因:两种算法,多个秘钥,更加有利于信息安全。
四、 第三方链接
参考博文:http://www.10tiao.com/html/227/201704/2650239103/1.html
工具方法下载的第三方链接(不是本人)://download.csdn.net/detail/chay_chan/9766486