5

我正在尝试固定公钥。我有一个SecKeyRef,我想用SecRSAPublicKeyCopyPublicSerialization. SecRSAPublicKeyCopyPublicSerialization将在 PKCS#1(即SubjectPublicKeyInfo)中序列化,该函数记录在http://www.opensource.apple.com/source/Security/Security-55163.44/sec/Security/SecRSAKey.c中。

PKCS#1 是公钥(即SubjectPublicKeyInfo)的 ASN.1 编码。这种格式适合固定。对于那些不熟悉的人,固定是主机的预期证书或公钥的白名单。在识别主机时,它们通常可以互换,但在某些情况下它们不是。例如,Google 的公钥是静态的(固定的),但 Google 会轮换“外部”X509 证书。在这种情况下,您将固定公钥,而不是证书。

什么是正确的标题和框架SecRSAPublicKeyCopyPublicSerialization?我已经包含Security.framework了,但是SecRSAPublicKeyCopyPublicSerialization缺少声明,并且在链接过程中缺少该函数。我确实尝试包括SecRSAKey.h.

对不起那些糟糕的标签。

杰夫

4

1 回答 1

3
static OSStatus SecRSAPublicKeyCopyPublicSerialization(SecKeyRef key, CFDataRef* serialized)

是安全框架内部使用的静态函数,不能从框架外部调用该函数。

看看SecItemExport。此函数可以将 a 转换SecKeyRef为不同的外部表示。

更新:我错过了标签。SecItemExport仅适用于 OSX 10.7 及更高版本,但不适用于 iOS。

在 iOS 上,(我认为)您必须将密钥添加到 KeyChain(SecItemAdd),然后使用SecItemCopyMatching()kSecReturnData设置为YES)来检索原始数据。

“CryptoExercise”示例项目的SecKeyWrapper.m中的getPublicKeyRef方法可能会有所帮助。

于 2013-02-07T09:41:52.867 回答