如何加载密钥并使用 RSA 加密 Swift

How to Load a Key and Encrypt With RSA Swift

如何在不使用库或 API 的情况下从文件加载 public 或私钥,然后在 Swift 中用它加密或解密数据?

您可以使用 OS X 的内置 OpenSSL 来生成和加密或 OS X 和 Swift.

的组合

OpenSSL 命令:

  1. openssl genrsa -out rsaPrivateKey.pem 4096(2048 也可以 – 经销商选择)
  2. openssl rsa -in rsaPrivateKey.pem -out rsaPrivateKey.key
  3. openssl req -new -key rsaPrivateKey.key -out rsaCertReq.crt(这个 步骤需要基本信息,iOS需要密码,所以设置一个 当它询问时)
  4. openssl x509 -req -days 10000 -in rsaCertReq.crt -signkey rsaPrivateKey.key -out rsaCert.crt
  5. openssl x509 -outform der -in rsaCert.crt -out publicKey.der
  6. openssl pkcs12 -export -out privateKey.pfx -inkey rsaPrivateKey.key -in rsaCert.crt

最后,从 iOS 的角度来看,重要的文件是 publicKey.der 和 privateKey.pfx。您将使用 publicKey.der 加密数据,并使用 privateKey.pfx 解密。


加密在iOS

在iOS中,Certificate, Key, and Trust ServicesAPI除了提供对密钥的编码和解码的支持功能外,还提供了基本的区块加密、解密、签名和验证功能使用以下 SecKey 函数的数据:

SecKeyEncrypt—使用指定密钥加密数据块。

SecKeyDecrypt—使用指定的密钥解密数据块。

SecKeyRawSign—使用指定的密钥对数据块进行签名。

SecKeyRawVerify—根据数据块和指定密钥验证签名。

Apple 文档
Encrypting and Hashing Data

您可以在 Apple 文档中找到有关如何使用这些函数的示例 Certificate, Key, and Trust Services Tasks for iOS

import UIKit
import CoreFoundation

为 Security.h

使用桥接头文件
#import <Security/Security.h>

好的,我为您做了一些研究,这就是我得出的结论(基于我在 this related question 中看到的答案)。

There is an open source GitHub project in Swift called Heimdall 这是 Apple 安全框架的一个很好的包装器。 GitHub 页面上的自述文件显示 "Swift 1.2" 但 Xcode 7 和 Swift 2.0 将在任何一天完成,因此希望它会尽快更新。

如果你想跳过使用开源的东西,那么你需要直接调用苹果的安全框架。查找包含这些调用的示例代码:SecKeyEncryptSecKeyDecrypt.

这两个调用(以及 SecKey.h 中的所有内容)似乎是 C 函数,但我链接到的 Apple 文档似乎表明可能有 Swift API可用。