【问题标题】:SecKeyRef to base64 and back in swiftSecKeyRef 到 base64 并迅速返回
【发布时间】:2015-05-27 09:30:28
【问题描述】:

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

因为我使用的是 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 中。

感谢任何形式的帮助。

谢谢

【问题讨论】:

    标签: ios swift


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-22
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多