【发布时间】: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 中。
感谢任何形式的帮助。
谢谢
【问题讨论】: