iOS:SecRSAPublicKeyCopyPublicSerialization?

jww*_*jww 5 security objective-c ios

我正在尝试固定公钥。我有一个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.

很抱歉那些糟糕的标签。

杰夫

Mar*_*n R 3

static OSStatus SecRSAPublicKeyCopyPublicSerialization(SecKeyRef key, CFDataRef* serialized)
Run Code Online (Sandbox Code Playgroud)

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

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

更新:我错过了问题中的SecItemExport仅适用于 OSX 10.7 及更高版本,不适用于 iOS。

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

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