Objective c 目标C:从密钥链导出私钥和公钥
我能够使用Objective c 目标C:从密钥链导出私钥和公钥,objective-c,keychain,public-key-encryption,private-key,Objective C,Keychain,Public Key Encryption,Private Key,我能够使用SecKeyGeneratePair函数创建公私密钥对 问题1。钥匙链中的钥匙显示为,但不显示任何名称。我们如何为这些键添加友好的名称 问题2。但是,如何导出以可用格式生成的公钥和私钥: -----BEGIN RSA PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqCWtYiGnhAv... -----END RSA PUBLIC KEY----- 以及: 注意,它们可以从keychain手动导出,但是如何使
SecKeyGeneratePair
函数创建公私密钥对
问题1。钥匙链中的钥匙显示为,但不显示任何名称。我们如何为这些键添加友好的名称
问题2。但是,如何导出以可用格式生成的公钥和私钥:
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqCWtYiGnhAv...
-----END RSA PUBLIC KEY-----
以及:
注意,它们可以从keychain手动导出,但是如何使用objective C API实现这一点呢
任何帮助都是值得的
这里有一个类似的问题,但没有任何答案:
没有必要仅为此目的而使用OpenSSL。也许您可以参考苹果公司的以下文档: 及 获取用于公钥加密的SecKeyRef对象 如果正在使用现有的公用和公用密钥,则从密钥链提取密钥 密钥链中的私钥、读取证书、密钥和信任 服务编程指南,了解如何检索 该键的SecKeychainItemRef对象 获得SecKeychainItemRef后,可以将其强制转换为 用于此API的SecKeyRef 导入现有公钥和私钥导入和导出 公钥和私钥对比 由于中的不同密钥格式的数量而生成新密钥 常用的 此示例描述如何在PEM中导入和导出密钥对 (隐私增强邮件)格式 将密钥导出到CFDataRef对象的步骤
SecKeyGeneratePair()
的参数字典中的标签
问题2。如何将密钥导出为PEM格式?
PEM格式与DER编码文件的数据相同,但它在base64中编码,并带有额外的页眉和页脚行。调用SecItemExport()
时,可以使用参数和标志接收DER格式的数据
这并不能回答问题。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。@pc shooter,感谢您提供的提示。现在我知道了这个问题,并提供了一些你所说的答案的基本部分。现在看起来好多了!
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
OSStatus oserr = SecItemExport(publickey,
externalFormat, // See SecExternalFormat for details
flags, // See SecItemImportExportFlags for details
¶ms,
(CFDataRef *)&pkdata); if (oserr) {
fprintf(stderr, "SecItemExport failed (oserr=%d)\n", oserr);
exit(-1); }
CFTypeRef key = NULL; // your key
CFDataRef data;
SecItemExport(key, kSecFormatX509Cert, kSecItemPemArmour, NULL, &data);
NSString* base64EncodedString = [(__bridge NSData*)data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSString* pemString = [NSString stringWithFormat:@"-----BEGIN FOO BAR KEY-----\n%@\n-----END FOO BAR KEY-----", base64EncodedString];
NSData* pemData = [pemString dataUsingEncoding:NSUTF8StringEncoding];