android手机客户端和服务器端通信时如何对数据进行加密,在Retrofit的基础上结合OpenSSL实现服务器和客户端之间数据加密通信...

安全加密C语言库OpenSSL,在Android中服务器和客户端之间的签名验证和数据加密通信等。

OpenSSL系列文章:

实现原理:

要实现服务器端和客户端数据加密通信,客户端可以通过RSA公钥加密,服务器端接收到客户端数据之后,用私钥进行解密就可以获取到客户端的明文数据。在数据传输的过程中,即使数据暴露了也没事,因为通过RSA公钥加密的数据,只能通过对应的私钥才能解密,而私钥只存在于服务器端,别人是无法获取的。但是上文中已经讲过了,当RSA加解密大量数据的时候,速度是很慢的,这在服务器和客户端之间通信是觉得不允许的。况且有的时候服务器端返回数据的时候也需要进行加密处理,而公钥是开放的,所以用私钥加密也就没有多大意义了。所以就有了RSA和AES结合,实现服务器端和客户端的安全,高效数据加密通信。

970a8331143f

970a8331143f

970a8331143f

970a8331143f

970a8331143f

实现过程:

举个列子说明,在这只是为了说明服务器端和客户端加密通信。用户输入用户名和密码注册成功之后,返回用户ID和Token。在此过程中客户端需要把数据加密之后向服务端发起请求,同时,服务器端也要把数据进行加密之后返回客户端。客户端通过AES加密用户名和密码得到密文A,此时通过AES加密需要秘钥B,在这里我们随机生成;然后,用RSA公钥对此随机生成的秘钥B进行加密得到密文C。服务器端接收到的数据有用户名和密码的密文A、AES秘钥的密文C;接下来服务器端就可以通过RSA私钥解密C得到秘钥B,然后通过秘钥B进行AES解密A得到用户名和密码的明文。服务器端通过秘钥B对用户ID和Token进行加密后返回给客户端,客户端接收到数据后,通过秘钥B解密得到原始数据。如果客户端需要保存此用户ID的话,可通过AES加密后存储到SharedPreferences中,这里有一个不变的秘钥,可写死在.so文件中,提高反编译门槛。

结合Retrofit来使用的话,可在interceptor中统一封装加密过程;自定义解析器先解密后再进行数据解析。

下载代码运行,在控制台中输入“body”,将看到所有调试信息。欢迎star,fork,转载。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值