繁体   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