gpt4 book ai didi

ios - 来自 Swift 中服务器的公钥字符串的 Seckey

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:23 25 4
gpt4 key购买 nike

我想使用 RSA 加密数据,我尝试在我的代码中生成 key 并且它正在运行,但我实际需要的是从服务器获取公钥作为字符串,然后将其用作 Seckey 这样我就可以使用它使用 RSA 加密数据,我试过这段代码:

//KeyString is the string of the key from server
let KeyData = (keyString as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!


var cert : Unmanaged<SecCertificateRef>!;
var policy : Unmanaged<SecPolicy>!;
cert = SecCertificateCreateWithData(kCFAllocatorDefault, KeyData);
policy = SecPolicyCreateBasicX509();
var status : OSStatus = noErr
var trust: SecTrust?
var certArray : [Unmanaged<SecCertificateRef>!] = [cert];
var certArrayPointer = UnsafeMutablePointer<UnsafePointer<Void>>(certArray)
status = SecTrustCreateWithCertificates(cert, policy, trust);
let publicKey: SecKeyRef = SecTrustCopyPublicKey(trust!).takeUnretainedValue()

我无法运行此代码,因为 SecTrustCreateWithCertificates 方法需要证书作为 anyObject! ,我不知道如何解决这个问题,如果解决这个问题会让我获得 SecKey。

我从 this answer in objective-c 得到上面的代码

所以如果有人能帮助我获得正确的代码来解决这个问题,我将非常感激:)

最佳答案

对于苹果机:

let pubKey = "-----BEGIN PUBLIC KEY-----MIICIjANBgAgK.......InbFk1FkucQqruMyUCAwEAAQ==-----END PUBLIC KEY-----"
let pubKeyData = pubKey.dataUsingEncoding(NSASCIIStringEncoding)
var error: Unmanaged<CFErrorRef>?
let secKey = SecKeyCreateFromData(NSDictionary(), pubKeyData!, &error)

其中 pubKey 是您的公钥的字符串表示形式。如果您不知道您的公钥,您可以使用以下命令从您的私钥中推断出它:

openssl rsa -in server.key -pubout  > mykey.pub

其中server.key是包含-----BEGIN RSA PRIVATE KEY-----的文件作为第一行。

对于 iOS:

这有点复杂。您需要一个 der 文件。它是您证书的二进制表示。如果您需要转换现有证书,可以使用以下命令:

 openssl x509 -outform der -in file.crt|pem -out mycert.der

.crt.pem 文件包含 -----BEGIN CERTIFICATE----- 作为第一行。

der 文件放入您的包中并执行:

let certificateData = NSData(contentsOfURL:NSBundle.mainBundle().URLForResource("mycert", withExtension: "der")!)

let certificate = SecCertificateCreateWithData(nil, certificateData!)

var trust: SecTrustRef?

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

if status == errSecSuccess {
let key = SecTrustCopyPublicKey(trust!)!;
}

亚塔! key 现在包含您的公钥的 SecKey 表示。快乐固定。

关于ios - 来自 Swift 中服务器的公钥字符串的 Seckey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28808101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com