我正在使用 swift 3 开发一个 iOS 应用程序。
我需要导出一个SecKey
(这是用户 RSA 公钥引用)到字符串(例如 base64),以便通过生成的 QRCode 共享它。
它也必须以另一种方式工作,因为扫描该文件的其他用户QRCode
,将能够重建一个SecKey
从 QRCode 中提取的字符串的引用。
我发现了一些教程,但我不明白我需要从中提取什么SecKey
参考,我不知道如何将其转换为String
.
导出密钥(仅限 iOS 10)
var error:Unmanaged<CFError>?
if let cfdata = SecKeyCopyExternalRepresentation(publicKey!, &error) {
let data:Data = cfdata as Data
let b64Key = data.base64EncodedString()
}
See https://stackoverflow.com/a/30662270/5276890 and https://stackoverflow.com/a/27935528/5276890对于可能支持 iOS
重新导入密钥
guard let data2 = Data.init(base64Encoded: b64Key) else {
return
}
let keyDict:[NSObject:NSObject] = [
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeyClass: kSecAttrKeyClassPublic,
kSecAttrKeySizeInBits: NSNumber(value: 512),
kSecReturnPersistentRef: true as NSObject
]
guard let publicKey = SecKeyCreateWithData(data2 as CFData, keyDict as CFDictionary, nil) else {
return
}
注意:这会生成一个 base64 密钥而不是证书。许多在线代码示例都涉及如何使用 SecCertificateCreateWithData 从证书生成公钥
另外:512 位生成速度很快,但毫无价值。一旦您对结果感到满意,请选择一个更长且安全的值。
当导入我生成和导出的密钥时,我得到了有效的结果,所以我认为它有效,但我没有尝试用它进行加密和解密。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)