Swift 使用公钥(.cer)加密Json有效负载

Swift 使用公钥(.cer)加密Json有效负载,swift,cryptography,public-key-encryption,Swift,Cryptography,Public Key Encryption,嗨,我想用公钥加密Json负载,即.cer文件。请建议怎么做 let path = Bundle.main.path(forResource: "Keys123_1", ofType: "cer") //get the data asociated to this file let urlStt = URL(fileURLWithPath: path!) if let base64String = try? Data(contentsOf: urlStt)

嗨,我想用公钥加密Json负载,即.cer文件。请建议怎么做

  let path = Bundle.main.path(forResource: "Keys123_1", ofType: "cer")
 //get the data asociated to this file
        let urlStt =  URL(fileURLWithPath: path!)
        if let base64String = try? Data(contentsOf: urlStt).base64EncodedString() {
            print(base64String)

        let data2 = Data.init(base64Encoded: base64String)

        let keyDict:[NSObject:NSObject] = [
            kSecAttrKeyType: kSecAttrKeyTypeRSA,
            kSecAttrKeyClass: kSecAttrKeyClassPublic,
            kSecAttrKeySizeInBits: NSNumber(value: 2048),
            kSecReturnPersistentRef: true as NSObject
        ]
            var error:Unmanaged<CFError>? = nil


            guard let key = SecKeyCreateWithData(data2 as! CFData, keyDict as CFDictionary, &error) else {
                print(error)
                return
            }
let path=Bundle.main.path(用于资源:“Keys123_1”,类型为:“cer”)
//获取与此文件相关的数据
让urlStt=URL(fileURLWithPath:path!)
如果让base64String=try?数据(contentsOf:urlStt).base64EncodedString(){
打印(base64String)
让data2=Data.init(base64Encoded:base64String)
let keyDict:[NSObject:NSObject]=[
kSecAttrKeyType:kSecAttrKeyTypeRSA,
kSecAttrKeyClass:kSecAttrKeyClassPublic,
kSecAttrKeySizeInBits:NSNumber(值:2048),
kSecReturnPersistentRef:作为NSObject为true
]
变量错误:非托管?=nil
guard let key=SecKeyCreateWithData(data2为!CFData,keyDict为CFDictionary,&error)else{
打印(错误)
返回
}
我得到这个错误:

Optional(Swift.Unmanaged<__ObjC.CFError>(_value: Error Domain=NSOSStatusErrorDomain Code=-50 "RSA public key creation from data failed" UserInfo={NSDescription=RSA public key creation from data failed}))
可选(Swift.Unmanaged(_值:Error Domain=NSOSStatusErrorDomain code=-50“从数据创建RSA公钥失败”UserInfo={NSDescription=RSA从数据创建公钥失败}))

试试这段代码,用公钥加密,用服务器端的私钥解密来验证数据。我遵循了这一点

也许这是你的工作

func getPublicKey() -> SecKey? {

        let certificateData = try! Data(contentsOf: Bundle.main.url(forResource: "public", withExtension: "cer")!)

        let certificate = SecCertificateCreateWithData(nil, certificateData as CFData)
        var trust: SecTrust?

        let policy = SecPolicyCreateBasicX509()
        let status = SecTrustCreateWithCertificates(certificate!, policy, &trust)

        if status == errSecSuccess {
            let publicKey = SecTrustCopyPublicKey(trust!)!
            return publicKey
        }
        return nil
}

发布您的示例代码,这是您迄今为止尝试过的。还要解释您用于加密-解密的算法。发布有问题的代码而不是答案,否则其他人会混淆这是问题还是答案。我有公钥(.cer)文件我们必须使用AES算法进行加密我在密码学方面非常新,所以请建议如何做。请不要编写密码!密码学很难。使用一个库来为您处理此问题。让certificate=SecCertificateCreateWithData(nil,certificateData作为CFData)证书即将发布。这只适用于我,并已从我共享的Apple文档链接中尝试。请确保路径正确,并且您正在从路径中获取证书数据。您也可以尝试使用
der
格式代替
cer
格式。