Swift 3将SecKey导出为String

Sca*_*aux 5 public-key-encryption ios swift seckeyref swift3

我正在使用swift 3开发iOS应用程序.

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

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

我发现很少有教程,但我不明白我需要从SecKey引用中提取什么,我不知道如何将它转换为String.

Roy*_*alk 13

导出密钥(仅限iOS 10)

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

有关可能支持iOS <10的更长途径,请参阅/sf/answers/2146358931/和/sf/answers/1955486991/.

重新进口钥匙

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
}
Run Code Online (Sandbox Code Playgroud)

注意:这会生成base64密钥而不是证书.许多在线代码示例处理如何使用SecCertificateCreateWithData从证书生成公钥

另外:512位生成速度快但毫无价值.一旦您对结果满意,请选择更长且更安全的值.

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


归档时间:

查看次数:

6225 次

最近记录:

7 年,3 月 前