当异构系统遇上 RSA

先捞干的,代码在 GitHub

背景

网络通信在安全性比较敏感的环境,有可能会用到 RSA 算法,这里有 RSA 的中文说明

但是在异构系统间通信,使用 RSA 加密的时候,由于各系统对于 RSA 的实现有些细节差异,比如:对证书和密钥格式的支持不一致,而且证书格式与扩展名关系又比较乱,所以会导致一些问题。

整体思路

证书格式方面,迁就 JavaScript,在 Objective-C 和 Java 端增加对相应格式的处理。

一、JavaScript

主要职责: 作为 Client 在 Web 页面使用,使用公钥对数据进行加密。

我们使用了 JavaScript 的 RSA 库 JSEncrypt。由于 JS 对二进制数据的支持不太方便,所以 JSEncrypt 对于公钥和私钥的支持,都使用了 PEM 格式。

二、Objective-C

主要职责: 作为 Client 在 iOS 或 macOS 设备上使用,使用公钥对数据进行加密。

其实在 Apple 的 Core Foundation 中,对 RSA 有比较标准的支持,但是不知道什么原因,不支持 PEM 格式密钥的处理。由于 JS 端处理能力有限,所以最后采用的是在 Objective-C 端集成 OpenSSL 的方式来处理。

参考内容:

三、Java

主要职责:

  • Android:作为 Android Client 使用公钥对数据进行加密。
  • JavaEE Server:作为 Server 使用私钥对数据进行解密。

参考内容:

Java 中对于 RSA 也有比较良好的支持,主体代码参考了《RSA Encryption Example》。但是这份代码也是不支持读取 PEM 格式的私钥,所以参考了 Stack Overflow

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 基础 1.1 对称算法 描述:对称加密是指加密过程和解密过程使用相同的密码。主要分:分组加密、序列加密。 原理...
    御浅永夜阅读 2,535评论 1 4
  • 嘟哝嘟哝:最近接到一个任务:在客户端动态生成RSA密钥对,然后向服务器发送这个密钥对中的公钥字符串,由服务器进行公...
    TimmyR阅读 8,111评论 19 21
  • HTTPS介绍 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩...
    齐滇大圣阅读 9,004评论 8 96
  • 一、#玩卡不卡·每日一抽# 每一位都可以通过这张卡片觉察自己: 1、直觉他叫什么名字?妞妞 2、他几岁了? 半岁 ...
    blue9802阅读 159评论 0 2
  • 漫漫古筝路 想起最初对古筝的印象,音色沉迷,古韵悠长,于一...
    拙兰阅读 475评论 10 22