簡體   English   中英

SecKeyRef到base64並快速返回

[英]SecKeyRef to base64 and back in swift

我正在嘗試在設備上生成一對公鑰/私鑰,並將其存儲在鑰匙串中。

由於我使用的是Swift,因此我將使用一個庫與鑰匙串進行交互。 這是我為https://github.com/matthewpalmer/Locksmith找到的那個。

生成密鑰后,我需要做的是將它們都轉換為base64,然后將它們存儲在密鑰鏈中,然后使用來自密鑰鏈的base64字符串重新創建兩個密鑰。

使用Locksmith庫應該是這樣的。

Locksmith.saveData(["publicKeyKey": "publicKeyBase64data"], forUserAccount: "myUserAccount")

要生成密鑰,我使用以下代碼

public func GenerateKeys() -> [SecKeyRef]{

    let keySize = 2048;
    var publicKeyPtr, privateKeyPtr: Unmanaged<SecKeyRef>?

    let publicKeyParameters: [String: AnyObject] = [
        kSecAttrIsPermanent as String: true,
        kSecAttrApplicationTag as String: "com.site.key.public"
    ]

    let privateKeyParameters: [String: AnyObject] = [
        kSecAttrIsPermanent as String: true,
        kSecAttrApplicationTag as String: "com.site.key.private"
    ]

    let parameters: [String: AnyObject] = [
        kSecAttrKeyType as! String: kSecAttrKeyTypeRSA,
        kSecAttrKeySizeInBits as! String: keySize,
        kSecPublicKeyAttrs.takeUnretainedValue() as! String: publicKeyParameters,
        kSecPrivateKeyAttrs.takeUnretainedValue() as! String: privateKeyParameters
    ]

    let result = SecKeyGeneratePair(parameters, &publicKeyPtr, &privateKeyPtr)
    let publicKey = publicKeyPtr!.takeRetainedValue()
    let privateKey = privateKeyPtr!.takeRetainedValue()
    let blockSize = SecKeyGetBlockSize(publicKey)

    return [publicKey, privateKey];
}

我能夠成功生成密鑰,但是我不知道如何將它們轉換為base64並返回。 所以我有SecKeyRef對象,但真的不知道要繼續。

我發現的大多數代碼都在我不太熟悉的Objective-C中。

任何幫助都將受到贊賞。

謝謝

您確實不需要其他鑰匙串提供程序。 您已將kSecAttrIsPermanent參數設置為true,因此根據Apple doc,keyPair已存儲在默認鑰匙串中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM