目标C:从钥匙串中导出私钥和公钥
我能够使用SecKeyGeneratePair
[Apple CryptoExercise]函数创建一个公私密钥对。
Q1。 钥匙串中的钥匙显示为不显示任何名称。 我们如何为密钥添加一个友好的名字。
Q2。 但是,我怎样才能导出已经以可用格式生成的公钥和私钥:
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqCWtYiGnhAv...
-----END RSA PUBLIC KEY-----
和:
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
请注意,它们可以从钥匙串手动导出,但如何使用客观C Apis来实现这一点。
任何帮助将是可观的。
这里有一个类似的问题,但没有任何答案:iPhone:你如何将SecKeyRef或包含公钥密码的NSData导出为PEM格式? 没有必要仅仅为此使用OpenSSL。
也许你可以参考Apple的这些文件:
获取公钥加密和证书,密钥和信任服务程序员指南的SecKeyRef对象
获取公钥加密的SecKeyRef对象
从钥匙串中提取密钥如果使用钥匙串中的现有公钥和私钥,请阅读证书,密钥和信任服务编程指南,以了解如何检索该密钥的SecKeychainItemRef对象。
获得SecKeychainItemRef后,您可以将其转换为SecKeyRef以用于此API。
导入现有的公钥和私钥导入和导出公钥和私钥对比生成新的密钥要复杂一些,因为常用的不同密钥格式的数量较多。
本示例介绍如何导入和导出PEM(隐私增强邮件)格式的密钥对。
将键导出到CFDataRef对象
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); }
Q1。 我们如何为密钥添加一个友好的名字?
使用kSecAttrLabel键在SecKeyGeneratePair()
参数字典中传递标签。
Q2。 如何将密钥导出为PEM格式?
PEM格式与DER编码的文件是相同的数据,但它使用base64编码,并带有额外的页眉和页脚行。 在调用SecItemExport()
时,可以使用kSecFormatX509Cert参数和kSecItemPemArmour标志接收DER格式的数据。
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];
链接地址: http://www.djcxy.com/p/26833.html
上一篇: Objective C: Exporting Private and Public Key from Keychain