Swift 如何在macOS上使用Security.framework解密数据?
我需要在Swift 如何在macOS上使用Security.framework解密数据?,swift,macos,encryption,rsa,security.framework,Swift,Macos,Encryption,Rsa,Security.framework,我需要在macOS上使用RSApublic密钥解密数据,通过谷歌搜索,我知道我们可以使用SecKeyCreateDecryptedData的Security.framework方法来实现这一点,但它会导致两个问题: SecKeyCreateDecryptedData接受private密钥来执行解密,但在我的情况下,数据在服务器端用私钥加密,需要在客户端用public密钥解密 我试图从RSApublic密钥字符串创建SecKey,但失败了 我的代码: 导入基础 func getPublicKe
macOS
上使用RSApublic
密钥解密数据,通过谷歌搜索,我知道我们可以使用SecKeyCreateDecryptedData
的Security.framework
方法来实现这一点,但它会导致两个问题:
SecKeyCreateDecryptedData
接受private
密钥来执行解密,但在我的情况下,数据在服务器端用私钥加密,需要在客户端用public
密钥解密
public
密钥字符串创建SecKey
,但失败了
Kazunori Takaishi
的方法,我测试了所有算法,没有一个是受支持的:
func decrypt(key:SecKey,data-cipherTextData:data)->data?{
let算法:[SecKeyAlgorithm]=[
.签名人劳先生,
.rsSignatureDigestPKCS1v15raw,
.rsAssignatureDigestPKCS1v15sha1,
.rsaSignatureDigestPKCS1v15SHA224,
.rsAssignatureDigestPKCS1V15SHA256,
.rsSignatureDigestPKCS1V15SHA384,
.rsAssignatureDigestPKCS1v15sha512,
.rsaSignatureMessagePKCS1v15SHA1,
.rsaSignatureMessagePKCS1v15SHA224,
.rsaSignatureMessagePKCS1v15SHA256,
.rsaSignatureMessagePKCS1v15SHA384,
.rsaSignatureMessagePKCS1v15SHA512,
.RSASignatureDigestPSSHA1,
.RSASignatureDigestPSSHA224,
.RSASignatureDigestPSSHA256,
.RSASignatureDigestPSSHA384,
.RSASignatureDigestPSSHA512,
.RSASignatureMessagePSSHA1,
.RSASignatureMessagePSSHA224,
.RSASignatureMessagePSSHA256,
.RSASignatureMessagePSSHA384,
.RSASignatureMessagePSSHA512,
.ECDSASignatorRFC4754,
.ecdsaSignatureDigestX962,
.ecdsaSignatureDigestX962SHA1,
.ecdsaSignatureDigestX962SHA224,
.ecdsaSignatureDigestX962SHA256,
.ecdsaSignatureDigestX962SHA384,
.ecdsaSignatureDigestX962SHA512,
.ecdsaSignatureMessageX962SHA1,
.ecdsaSignatureMessageX962SHA224,
.ecdsaSignatureMessageX962SHA256,
.ecdsaSignatureMessageX962SHA384,
.ecdsaSignatureMessageX962SHA512,
.rsaEncryptionRaw,
.rsaEncryptionPKCS1,
.AEPSHA1,
.AEPSHA224,
.AEPSHA256,
.AEPSHA384,
.AEPSHA512,
.AEPSHA1AESGCM,
.AEPSHA224AESGCM,
.AEPSHA256AESGCM,
.AEPSHA384AESGCM,
.AEPSHA512AESGCM,
.ECIENCryptions标准X963SHA1AESGCM,
.ECIENCryptions标准X963SHA224AESGCM,
.ECIENCryptions标准X963SHA256ESGCM,
.ECIENCryptions标准X963SHA384AESGCM,
.ECIENCryptions标准X963SHA512ESGCM,
.ECIENCryption辅因子X963SHA1AESGCM,
.ECIENCryption辅因子X963SHA224AESGCM,
.ECIENCryption辅因子X963SHA256AESGCM,
.ECIENCryption辅因子X963SHA384AESGCM,
.ECIENCryption辅因子X963SHA512AESGCM,
.ECIENCryptions标准变量IVX963SHA224AESGCM,
.ECIENCryptions标准变量IVX963SHA256ESGCM,
.物种增加标准变量IVX963SHA384AESGCM,
.ECIENCryptions标准变量IVX963SHA512ESGCM,
.ECIENCryption辅因子可变IVX963SHA224AESGCM,
.ECIENCryption辅因子可变IVX963SHA256ESGCM,
.ECIENCryption辅因子可变IVX963SHA384AESGCM,
.EciseEncryption辅因子可变IVX963SHA512ESGCM,
.ecdhKeyExchangeStandard,
.ecdhKeyExchangeStandardX963SHA1,
.ecdhKeyExchangeStandardX963SHA224,
.ecdhKeyExchangeStandardX963SHA256,
.ecdhK
func getPublicKey(from data: Data?) throws -> SecKey {
var error: Unmanaged<CFError>? = nil
guard let data = data else { throw error!.takeRetainedValue() as Error }
let publicKeyMaybe = SecKeyCreateFromData([:] as CFDictionary, data as NSData, &error)
guard let publicKey = publicKeyMaybe else {
throw error!.takeRetainedValue() as Error
}
return publicKey
}
let pubKey = try! getPublicKey(from: kPubKey.data(using: .ascii))