我正在尝试生成 RSA
key 并将其保存到钥匙串(keychain)中。我生成了两把公钥和一把私钥。
public key one -> generated using SecKeyGeneratePair &
private key one -> generated using SecKeyGeneratePair
public key two -> generated using SecKeyCreateWithData
将所有三个键的 kSecAttrIsPermanent
属性设置为 true
。
然后我用下面的方法检索 key
func GetKeysfromKeyChain(tag: String) -> SecKey? {
let query : [String: Any] = [
String(kSecClass) : kSecClassKey,
String(kSecAttrKeyType): kSecAttrKeyTypeRSA,
String(kSecAttrApplicationTag): tag,
String(kSecReturnRef): true
]
var result: AnyObject?
let status = SecItemCopyMatching(query as CFDictionary, &result)
if status == errSecSuccess {
print("key existed :")
return result as! SecKey?
}
return nil
}
通过以上方法,可以成功得到公钥1
和私钥1
。但是对于 public key two
它总是返回一个 nil 值。不知道。希望您对此有所帮助。
这就是我生成公钥二的方法
let data2 = Data.init(base64Encoded: serverPublicKey)
let keyDict:[NSObject:NSObject] = [
kSecAttrIsPermanent: true as NSObject,
kSecAttrApplicationTag: "com.marlonbrand.serverpublic".data(using: String.Encoding.utf8)! as NSObject,
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits: 2048 as NSObject,
kSecAttrKeyClass: kSecAttrKeyClassPublic
]
let publickeysi = SecKeyCreateWithData(data2! as CFData, keyDict as CFDictionary, nil)
最佳答案
您是否尝试过将 keyDict
的类型设置为 [String : Any]
并在需要时进行适当的转换?如果非要我猜的话,对 NSObject 的强制转换可能会把事情搞砸。
关于ios - 是否可以将多个公钥保存到 ios 中的钥匙串(keychain),swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854150/