如何在两种公钥格式之间进行转换,一种格式为:
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
另一种格式是:
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
例如,我使用ssh-keygen命令生成了id_rsa/id_rsa.pub对,我使用以下方法计算了id_rsa中的公钥:
openssl rsa -in id_rsa -pubout -out pub2
Run Code Online (Sandbox Code Playgroud)
然后我再次使用以下方法从id_rsa.pub计算公钥:
ssh-keygen -f id_rsa.pub -e -m pem > pub1
Run Code Online (Sandbox Code Playgroud)
pub1的内容是:
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA61BjmfXGEvWmegnBGSuS+rU9soUg2FnODva32D1AqhwdziwHINFa
D1MVlcrYG6XRKfkcxnaXGfFDWHLEvNBSEVCgJjtHAGZIm5GL/KA86KDp/CwDFMSw
luowcXwDwoyinmeOY9eKyh6aY72xJh7noLBBq1N0bWi1e2i+83txOCg4yV2oVXhB
o8pYEJ8LT3el6Smxol3C1oFMVdwPgc0vTl25XucMcG/ALE/KNY6pqC2AQ6R2ERlV
gPiUWOPatVkt7+Bs3h5Ramxh7XjBOXeulmCpGSynXNcpZ/06+vofGi/2MlpQZNhH
Ao8eayMp6FcvNucIpUndo1X8dKMv3Y26ZQIDAQAB
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
而pub2的内容是:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA61BjmfXGEvWmegnBGSuS
+rU9soUg2FnODva32D1AqhwdziwHINFaD1MVlcrYG6XRKfkcxnaXGfFDWHLEvNBS
EVCgJjtHAGZIm5GL/KA86KDp/CwDFMSwluowcXwDwoyinmeOY9eKyh6aY72xJh7n
oLBBq1N0bWi1e2i+83txOCg4yV2oVXhBo8pYEJ8LT3el6Smxol3C1oFMVdwPgc0v
Tl25XucMcG/ALE/KNY6pqC2AQ6R2ERlVgPiUWOPatVkt7+Bs3h5Ramxh7XjBOXeu
lmCpGSynXNcpZ/06+vofGi/2MlpQZNhHAo8eayMp6FcvNucIpUndo1X8dKMv3Y26
ZQIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
根据我的理解,pub1和pub2包含相同的公钥信息,但它们的格式不同,我想知道如何在两种格式之间进行转换?任何人都可以向我展示两种格式的简明介绍吗?
我使用SecKeyGeneratePair函数为基于Swift的iOS应用程序生成了私钥和公钥.
然后,我使用iOS CSR生成生成证书签名请求,我的服务器以PEM格式回复证书链.
我使用以下代码将PEM证书转换为DER格式:
var modifiedCert = certJson.replacingOccurrences(of: "-----BEGIN CERTIFICATE-----", with: "")
modifiedCert = modifiedCert.replacingOccurrences(of: "-----END CERTIFICATE-----", with: "")
modifiedCert = modifiedCert.replacingOccurrences(of: "\n", with: "")
let dataDecoded = NSData(base64Encoded: modifiedCert, options: [])
Run Code Online (Sandbox Code Playgroud)
现在,我应该使用DER-data创建证书 let certificate = SecCertificateCreateWithData(nil, certDer)
我的问题如下:如何将证书与我在开头创建的私钥连接,并获得这两个(密钥和证书)所属的身份?
也许,将证书添加到钥匙串并获取身份使用SecItemCopyMatching?我已经按照SecIdentityRef程序中提出的程序进行了操作
编辑:
将证书添加到钥匙串时,我得到状态响应0,我相信这意味着证书已添加到钥匙串中.
let certificate: SecCertificate? = SecCertificateCreateWithData(nil, certDer)
if certificate != nil{
let params : [String: Any] = [
kSecClass as String : kSecClassCertificate,
kSecValueRef as String : certificate!
]
let …Run Code Online (Sandbox Code Playgroud) certificate ×1
encryption ×1
ios ×1
openssl ×1
pkcs#1 ×1
public-key ×1
ssh-keys ×1
swift ×1
x509 ×1