SecKeyRef到base64并返回swift

时间:2015-05-27 09:30:28

标签: ios swift

我正在尝试在设备上生成一对公钥/私钥,并将它们存储在钥匙串中。

由于我使用swift,我将使用库与钥匙串进行交互。这是我为https://github.com/matthewpalmer/Locksmith找到的那个。

生成密钥后我需要做的是将它们转换为base64,然后将它们存储在密钥链中,然后使用keychain中的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中,我并不熟悉。

感谢任何形式的帮助。

由于

1 个答案:

答案 0 :(得分:1)

您真的不需要其他钥匙串提供商。您已将kSecAttrIsPermanent参数设置为true,因此根据Apple doc,keyPair已存储在默认钥匙串中。