ios - Swift 3 将 SecKey 导出到字符串

标签 ios swift swift3 public-key-encryption seckeyref

我正在使用 swift 3 开发一个 iOS 应用。

我需要将 SecKey(这是用户 RSA 公钥引用)导出到字符串(例如 base64),以便通过生成的 QRCode 共享它。

它也必须以其他方式工作,因为扫描 QRCode 的其他用户将能够从从 QRCode 中提取的字符串重建 SecKey 引用。

我找到了一些教程,但我不明白我需要从 SecKey 引用中提取什么,我也不知道如何将它转换为 String.

最佳答案

导出 key (仅限 iOS 10)

var error:Unmanaged<CFError>?
if let cfdata = SecKeyCopyExternalRepresentation(publicKey!, &error) {
   let data:Data = cfdata as Data
   let b64Key = data.base64EncodedString()
}

参见 https://stackoverflow.com/a/30662270/5276890https://stackoverflow.com/a/27935528/5276890可能支持 iOS < 10 的更长的方式。

重新导入 key

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 key 而不是证书。网上有很多代码示例处理如何使用 SecCertificateCreateWithData 从证书生成公钥

此外:512 位生成速度很快但毫无值(value)。对结果满意后,选择更长且安全的值。

导入我生成和导出的 key 时,我得到了有效结果,所以我认为它有效,但我没有尝试用它加密和解密。

关于ios - Swift 3 将 SecKey 导出到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43669237/

相关文章:

ios - 如何使用 Url 初始化 OutputStream?

objective-c - 如何从源服务器 URL 生成缩略图?

ios - 在 Swift 3 中处理 try 和 throws

IOS Xcode subview 不覆盖真实设备中的所有屏幕

iOS 自定义字体显示在模拟器上,但不显示在设备上

ios - 基于 block 的 NSNotificationCenter 观察子类?

iOS、EXIF 和相机型号名称

swift - 无法初始化嵌套泛型

ios - OAuth2、 swift 3、Instagram

ios - 安装Cocoapods时出错