Swift 使用公钥(.cer)加密Json有效负载
嗨,我想用公钥加密Json负载,即.cer文件。请建议怎么做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)
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
格式。