我正在尝试在设备上生成一对公钥/私钥,并将它们存储在钥匙串中。
由于我使用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中,我并不熟悉。
感谢任何形式的帮助。
由于
答案 0 :(得分:1)
您真的不需要其他钥匙串提供商。您已将kSecAttrIsPermanent参数设置为true,因此根据Apple doc,keyPair已存储在默认钥匙串中。