Skip to content

Herbert8/RSA4ObjC-Java-JavaScript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

当异构系统遇上 RSA

背景

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

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

整体思路

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

准备工作

在终端中,使用 OpenSSL 生成需要的公钥、私钥对

# 生成 PEM 格式的私钥
$ openssl genrsa -out rsa_1024_priv.pem 1024

# 根据私钥生成对应 PEM 格式的公钥
$ openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem

一、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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published