APIDoc

License

BlueRSA

Swift 跨平台 RSA 封装库,用于 RSA 加密和签名。可在受支持的 Apple 平台(使用 Security framework)上运行。Linux(使用 OpenSSL)可以工作,但仍在开发中。

目录

先决条件

Swift

macOS

iOS

Linux

构建

要从命令行构建 CryptorRSA

% cd <path-to-clone>
% swift build

测试

要从命令行运行为 CryptorRSA 提供的单元测试

% cd <path-to-clone>
% swift build
% swift test

使用 CryptorRSA

包含在您的项目中

Swift Package Manager

要将 BlueRSA 包含到 Swift Package Manager 包中,请将其添加到 Package.swift 文件中定义的 dependencies 属性。您可以使用 majorVersionminor 参数选择版本。例如

	dependencies: [
		.package(url: "https://github.com/Kitura/BlueRSA", majorVersion: <majorVersion>, minor: <minor>)
	]

Carthage

要在使用 Carthage 的项目中包含 BlueRSA,请在您的 Cartfile 中添加一行,其中包含 GitHub 组织和项目名称以及版本。例如

	github "Kitura/BlueRSA" ~> <majorVersion>.<minor>

开始之前

您需要做的第一件事是导入 CryptorRSA 框架。这可以通过以下方式完成

import CryptorRSA

数据类型

BlueRSA 支持以下主要数据类型

密钥处理

BlueRSA 提供了七 (7) 个函数,分别用于从数据创建公钥和私钥。它们如下所示(其中 createXXXXcreatePublicKeycreatePrivateKey,具体取决于您要创建的内容)

此外,还有三个 API,用于通过从 PEM 格式的证书中提取密钥来创建公钥:它们是

示例

以下示例说明了如何创建给定位于特定路径上的 PEM 编码文件的公钥。*注意:为了简洁起见,省略了异常处理。

import Foundation
import CryptorRSA

...

let keyName = ...
let keyPath = ...

let publicKey = try CryptorRSA.createPublicKey(withPEMNamed: keyName, onPath: keyPath)

...

<Do something with the key...>

数据加密和解密处理

BlueRSA 提供了用于创建三种 (3) 数据处理类型中每一种类型的函数

明文数据处理和签名

有两个类级别函数用于创建 PlaintextData 对象。它们是

创建 PlaintextData 对象后,有两个实例函数可用于操作包含的数据。它们是

示例

import Foundation
import CryptorRSA

...

let keyName = ...
let keyPath = ...

let myData: Data = <... Data to be encrypted ...>

let publicKey = try CryptorRSA.createPublicKey(withPEMNamed: keyName, onPath: keyPath)
let myPlaintext = CryptorRSA.createPlaintext(with: myData)
let encryptedData = try myPlaintext.encrypted(with: publicKey, algorithm: .sha1)

...

< Do something with the encrypted data...>

import Foundation
import CryptorRSA

...

let keyName = ...
let keyPath = ...

let myData: Data = <... Data to be signed ...>

let privateKey = try CryptorRSA.createPrivateKey(withPEMNamed: keyName, onPath: keyPath)
let myPlaintext = CryptorRSA.createPlaintext(with: myData)
let signedData = try myPlaintext.signed(with: privateKey, algorithm: .sha1)

...

< Do something with the signed data...>

加密数据处理

有两个类级别函数用于创建 EncryptedData 对象。它们是

创建 EncryptedData 对象后,有一个实例函数可用于解密封闭的数据

BlueRSA 当前支持 OAEP 填充,这是推荐的填充算法。

示例

import Foundation
import CryptorRSA

...

let keyName = ...
let keyPath = ...
let publicKey = try CryptorRSA.createPublicKey(withPEMNamed: keyName, onPath: keyPath)

let pkeyName = ...
let pkeyPath = ...
let privateKey = try CryptorRSA.createPrivateKey(withPEMNamed: pkeyName, onPath: pkeyPath)

let myData: Data = <... Data to be encrypted ...>

let myPlaintext = CryptorRSA.createPlaintext(with: myData)
let encryptedData = try myPlaintext.encrypted(with: publicKey, algorithm: .sha1)

let decryptedData = try encryptedData.decrypted(with: privateKey, algorithm: .sha1)

...

< Do something with the decrypted data...>


签名验证处理

有一个类级别函数可用于创建 SignedData 对象。它是

一旦创建或获取了 PlaintextDataSignedData,就有一个实例函数可用于验证其中包含的签名

import Foundation
import CryptorRSA

...

let keyName = ...
let keyPath = ...
let publicKey = try CryptorRSA.createPublicKey(withPEMNamed: keyName, onPath: keyPath)

let pkeyName = ...
let pkeyPath = ...
let privateKey = try CryptorRSA.createPrivateKey(withPEMNamed: pkeyName, onPath: pkeyPath)

let myData: Data = <... Data to be signed ...>

let myPlaintext = CryptorRSA.createPlaintext(with: myData)
let signedData = try myPlaintext.signed(with: privateKey, algorithm: .sha1)

if try myPlaintext.verify(with: publicKey, signature: signedData, algorithm: .sha1) {

	print("Signature verified")

} else {

	print("Signature Verification Failed")
}

数据类型实用程序函数

所有三种数据处理类型都有两个通用的实用程序实例函数。它们是

社区

我们喜欢讨论服务器端 Swift 和 Kitura。加入我们的 Slack 与团队会面!

许可证

此库在 Apache 2.0 许可证下获得许可。完整许可证文本可在 LICENSE 中找到。