网络数据的传输一般都是用对称加密算法
非对称加密算法因为效率的问题只用来加密 对称加密算法 的秘钥和 用于 数字签名
案例
- AES 对称加密算法
- RSA 非对称加密算法
操作前 服务器和客户端都已拥有双方的公钥
Android的RSA公钥-->发送给服务器用
服务器的RSA公钥-->发送给客户端用
单项验证
如客户端验证服务器的真实性
Android客户端(拥有AES秘钥)
使用 非对称加密算法即 服务器的RSA公钥 对Android客户端的AES的秘钥进行加密
然后 Http Get请求 并发送Android客户端的AES秘钥给服务器
服务器收到请求后,使用自己的RSA私钥对请求解密 获取到Android的AES秘钥,然后把发送给Android客户端的数据如 byte [] datas进行签名即sign
把sign和datas 一起用Android客户端的AES秘钥进行加密,然后发送给Android客户端
Android客户端收到后,再用自己的AES秘钥把整个数据包解密,此时进行数据分离,获取到sign和datas,然后对sign进行验证,验证方法就是用服务器的公钥配合参数sign进行签名验证
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initVerify(pubKey); //使用服务器发给客户端的公钥
boolean flag = signatrue.verify(sign);
注意事项
服务器的RSA私钥进行签名 sign,因为sign的长度是固定的(和初始化的秘钥长度相等),故很容易进行数据分离
如解密后进行str.substring()可以分离 datas和sign
网友评论