Swift 中的公钥 RSA 加密。
SwiftyRSA 的重命名分支 (https://github.com/TakeScoop/SwiftyRSA),该项目用于 Scoop iOS 应用,用于在通过 Checkr 的 API 提交驾驶执照号码之前对其进行加密。
do {
let publicKey = try NiftyRSAPublicKey(pemNamed: "public")
let str = "Clear String"
let clear = try ClearMessage(string: str)
let encrypted = try clear.encrypted(with: publicKey)
let data = encrypted.data
print(data)
let base64String = encrypted.base64String
print(base64String)
} catch {
print(error)
}
let privateKey = try NiftyRSAPrivateKey(pemNamed: "private")
let encrypted = try EncryptedMessage(base64Encoded: "AAA===")
let clear = try encrypted.decrypted(with: privateKey)
// Then you can use:
let data = clear.data
let base64String = clear.base64String
let string = clear.string(using: .utf8)
let publicKey = try NiftyRSAPublicKey(derNamed: "public")
let privateKey = try NiftyRSAPrivateKey(derNamed: "private")
let publicKey = try NiftyRSAPublicKey(pemNamed: "public")
let privateKey = try NiftyRSAPrivateKey(pemNamed: "private")
let publicKey = try NiftyRSAPublicKey(pemEncoded: str)
let privateKey = try NiftyRSAPrivateKey(pemEncoded: str)
let publicKey = try NiftyRSAPublicKey(base64Encoded: base64String)
let privateKey = try NiftyRSAPrivateKey(base64Encoded: base64String)
let publicKey = try NiftyRSAPublicKey(data: data)
let privateKey = try NiftyRSAPrivateKey(data: data)
let publicKey = try NiftyRSAPublicKey(reference: secKey)
let privateKey = try NiftyRSAPrivateKey(reference: secKey)
let str = "Clear Text"
let clear = try ClearMessage(string: str, using: .utf8)
let encrypted = try clear.encrypted(with: publicKey)
let data = encrypted.data
let base64String = encrypted.base64Encoded
let encrypted = try EncryptedMessage(base64Encoded: base64String)
let clear = try encrypted.decrypted(with: privateKey)
let data = clear.data
let base64String = clear.base64Encoded
let string = try clear.string(using: .utf8)
NiftyRSA 可以使用私钥对数据进行签名。 NiftyRSA 将计算提供的 String
/Data
的 SHA 摘要,并使用它来生成数字签名。
let clear = try ClearMessage(string: "Clear Text")
let signature = clear.signed(with: privateKey, digestType: .sha1)
let data = signature.data
let base64String = signature.base64String
NiftyRSA 可以使用公钥验证数字签名。 NiftyRSA 将计算提供的 String
/Data
的摘要,并使用它来验证数字签名。
let signature = try Signature(base64Encoded: "AAA===")
let isSuccessful = try clear.verify(with: publicKey, signature: signature, digestType: .sha1)
let keyPair = NiftyRSA.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
NiftyRSA 支持公钥的 X.509 证书。 NiftyRSA 可以将 X.509 标头添加到无标头的公钥,或者相反,剥离它以获得没有标头的密钥。
let publicKey = NiftyRSAPublicKey(data: data)
let publicKeyData = try publicKey.data()
let publicKey_with_X509_header = try NiftyRSA.prependX509KeyHeader(keyData: publicKeyData)
let publicKey_headerLess: Data = try NiftyRSA.stripKeyHeader(keyData: publicKey_with_X509_header)
警告 : 存储(使用 NiftyRSA 的方法)或创建 NiftyRSAPublicKey
实例将自动剥离密钥中的标头。 有关更多信息,请参见上面的幕后花絮。
使用 ssh-keygen
生成 PEM 公钥和 PEM 私钥。 NiftyRSA 还支持 DER 公钥。
$ ssh-keygen -t rsa -m PEM -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 密钥,NiftyRSA 使用了一些技术,例如 X.509 标头剥离,以便密钥链接受它们。
使用公钥加密时
SecKeyEncrypt
使用密钥引用和消息数据加密 ClearMessage
。EncryptedMessage
使用私钥解密时
SecKeyDecrypt
使用密钥引用和加密消息数据解密 EncryptedMessage
ClearMessage
本项目受 MIT 许可证保护。 完整的许可证可以在这里找到: https://github.com/unibas-medfak/NiftyRSA/blob/master/LICENSE