Swift 3 将 SecKey 导出到字符串
Swift 3 export SecKey to String
我正在使用 swift 开发一个 iOS 应用程序 3.
我需要将 SecKey
(这是用户 RSA 公钥引用)导出到字符串(例如 base64),以便通过生成的 QRCode 共享它。
它也必须以另一种方式工作,因为扫描 QRCode
的其他用户将能够从 QRCode 中提取的字符串重建 SecKey
引用。
我找到的教程很少,但我不明白我需要从 SecKey
参考中提取什么,而且我不知道如何将其转换为 String
。
导出密钥(iOS 仅限 10)
var error:Unmanaged<CFError>?
if let cfdata = SecKeyCopyExternalRepresentation(publicKey!, &error) {
let data:Data = cfdata as Data
let b64Key = data.base64EncodedString()
}
请参阅 and 了解可能支持 iOS < 10 的更长方法。
重新导入密钥
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
从证书生成 public 密钥
另外:512 位生成速度快但毫无价值。对结果满意后,请选择更长且安全的值。
我在导入我生成和导出的密钥时得到了有效结果,所以我假设它有效,但我没有尝试用它加密和解密。
我正在使用 swift 开发一个 iOS 应用程序 3.
我需要将 SecKey
(这是用户 RSA 公钥引用)导出到字符串(例如 base64),以便通过生成的 QRCode 共享它。
它也必须以另一种方式工作,因为扫描 QRCode
的其他用户将能够从 QRCode 中提取的字符串重建 SecKey
引用。
我找到的教程很少,但我不明白我需要从 SecKey
参考中提取什么,而且我不知道如何将其转换为 String
。
导出密钥(iOS 仅限 10)
var error:Unmanaged<CFError>?
if let cfdata = SecKeyCopyExternalRepresentation(publicKey!, &error) {
let data:Data = cfdata as Data
let b64Key = data.base64EncodedString()
}
请参阅 and
重新导入密钥
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
从证书生成 public 密钥另外:512 位生成速度快但毫无价值。对结果满意后,请选择更长且安全的值。
我在导入我生成和导出的密钥时得到了有效结果,所以我假设它有效,但我没有尝试用它加密和解密。