程序员

数字签名的案例说明

2016-12-10  本文已影响54人  Alien的小窝

网络数据的传输一般都是用对称加密算法
非对称加密算法因为效率的问题只用来加密 对称加密算法 的秘钥和 用于 数字签名

案例

  1. AES 对称加密算法
  2. 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

上一篇下一篇

猜你喜欢

热点阅读