SwiftyRSA 1.7.0

SwiftyRSA 1.7.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2021年7月
SPM支持 SPM

TakeScoop OpsPaul MacRoryIan Keith 维护。



SwiftyRSA 1.7.0

  • Scoop

SwiftyRSA

维护者: @starback

Swift 中的公钥 RSA 加密。

SwiftyRSA 用于 Scoop iOS 应用 中,在将车牌号提交到 Checkr 通过我们的 API 之前对其进行加密。

安装

Swift 5.0+

SwiftyRSA 使用 Swift 5.0 并需要 Xcode 10.2+.

使用 Cocoapods

pod 'SwiftyRSA'

使用 Carthage

github "TakeScoop/SwiftyRSA"

Objective-C

pod 'SwiftyRSA/ObjC'

快速入门

使用公钥加密

let publicKey = try PublicKey(pemNamed: "public")
let clear = try ClearMessage(string: "Clear Text", using: .utf8)
let encrypted = try clear.encrypted(with: publicKey, padding: .PKCS1)

// Then you can use:
let data = encrypted.data
let base64String = encrypted.base64String

使用私钥解密

let privateKey = try PrivateKey(pemNamed: "private")
let encrypted = try EncryptedMessage(base64Encoded: "AAA===")
let clear = try encrypted.decrypted(with: privateKey, padding: .PKCS1)

// Then you can use:
let data = clear.data
let base64String = clear.base64String
let string = clear.string(using: .utf8)

高级使用

创建公钥/私钥表示

使用DER文件

let publicKey = try PublicKey(derNamed: "public")
let privateKey = try PrivateKey(derNamed: "private")

使用PEM文件

let publicKey = try PublicKey(pemNamed: "public")
let privateKey = try PrivateKey(pemNamed: "private")

使用PEM字符串

let publicKey = try PublicKey(pemEncoded: str)
let privateKey = try PrivateKey(pemEncoded: str)

使用Base64字符串

let publicKey = try PublicKey(base64Encoded: base64String)
let privateKey = try PrivateKey(base64Encoded: base64String)

使用数据

let publicKey = try PublicKey(data: data)
let privateKey = try PrivateKey(data: data)

使用SecKey

let publicKey = try PublicKey(reference: secKey)
let privateKey = try PrivateKey(reference: secKey)

使用公钥加密

let str = "Clear Text"
let clear = try ClearMessage(string: str, using: .utf8)
let encrypted = try clear.encrypted(with: publicKey, padding: .PKCS1)

let data = encrypted.data
let base64String = encrypted.base64Encoded

使用私钥解密

let encrypted = try EncryptedMessage(base64Encoded: base64String)
let clear = try encrypted.decrypted(with: privateKey, padding: .PKCS1)

let data = clear.data
let base64String = clear.base64Encoded
let string = try clear.string(using: .utf8)

使用私钥签名

SwiftyRSA可以使用私钥对数据进行签名。SwiftyRSA将计算所提供的StringData的SHA摘要,并使用该摘要生成数字签名。

let clear = try ClearMessage(string: "Clear Text", using: .utf8)
let signature = clear.signed(with: privateKey, digestType: .sha1)

let data = signature.data
let base64String = signature.base64String

使用公钥验证

SwiftyRSA可以使用公钥验证数字签名。SwiftyRSA将计算所提供的StringData的摘要,并使用该摘要验证数字签名。

let signature = try Signature(base64Encoded: "AAA===")
let isSuccessful = try clear.verify(with: publicKey, signature: signature, digestType: .sha1)

创建公钥/私钥RSA密钥对

let keyPair = SwiftyRSA.generateRSAKeyPair(sizeInBits: 2048)
let privateKey = keyPair.privateKey
let publicKey = keyPair.publicKey

导出密钥或访问其内容

let pem = try key.pemString()
let base64 = try key.base64String()
let data = try key.data()
let reference = key.reference
let originalData = key.originalData

创建公钥和私钥RSA密钥

使用ssh-keygen生成PEM格式的公钥和私钥。SwiftyRSA也支持DER格式的公钥。

$ ssh-keygen -t rsa -f ~/mykey -N ''
$ cat ~/mykey > ~/private.pem
$ ssh-keygen -f ~/mykey.pub -e -m pem > ~/public.pem

您的密钥现在存储在~/public.pem~/private.pem中。别忘了将~/mykey~/mykey.pub移动到安全的地方。

内部机制

要启用iOS上的公钥/私钥RSA密钥使用,SwiftyRSA使用一些技术,如X.509头剥离,以便令牌链(keychain)可以接受它们。

点击此处了解更多详情

在加密时使用公钥

  • 如果密钥是以PEM格式存储的,去除其元数据,并将其转换为Data
  • 去除公钥的X.509头,否则令牌链将无法接受它
  • 使用随机标签将公钥添加到令牌链
  • 使用密钥标签获取密钥的引用
  • 使用 SecKeyEncrypt 使用密钥引用和消息数据加密 ClearMessage
  • 将生成的加密数据存储到 EncryptedMessage 中。
  • 当密钥被取消分配时,使用其标签从密钥链中删除公钥。

使用私钥解密时

  • 移除PEM元数据并将其转换为数据。
  • 使用随机标签将私钥添加到应用程序密钥链中。
  • 使用密钥标签获取密钥的引用
  • 使用 SecKeyDecrypt 使用密钥引用和解密消息数据解密 EncryptedMessage
  • 将生成的解密数据存储到 ClearMessage 中。
  • 使用标签从密钥链中删除私钥。

启发于

许可证

本项目受MIT许可证保护。完整的许可证可以在以下链接找到: https://github.com/TakeScoop/SwiftyRSA/blob/master/LICENSE