首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS SecKeyRef (公钥)将其发送到服务器

iOS SecKeyRef (公钥)将其发送到服务器
EN

Stack Overflow用户
提问于 2012-06-01 12:30:48
回答 1查看 4.8K关注 0票数 9

现在,我的公钥出现了问题,我使用SecKeyGeneratePair生成公共和私有密钥。现在我必须把我的公钥发送到服务器。我使用了下面的方法将SecKeyRef转换为NSData,在那里我总是得到相同的公钥。但是,我将其转换为base64格式,并将其发送到服务器。但是它根本不起作用,服务器(Java)开始抛出错误。以下是我的iOS代码:

代码语言:javascript
复制
- (NSData *)getPublicKeyBits {
    OSStatus sanityCheck = noErr;
    NSData * publicKeyBits = nil;

    NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init];

    // Set the public key query dictionary.
    [queryPublicKey setObject:(id)kSecClassKey forKey:(id)kSecClass];
    [queryPublicKey setObject:publicTag forKey:(id)kSecAttrApplicationTag];
    [queryPublicKey setObject:(id)kSecAttrKeyTypeRSA forKey:(id)kSecAttrKeyType];
    [queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecReturnData];

    // Get the key bits.
    sanityCheck = SecItemCopyMatching((CFDictionaryRef)queryPublicKey, (CFTypeRef *)&publicKeyBits);

    if (sanityCheck != noErr)
    {
        publicKeyBits = nil;
    }

    [queryPublicKey release];

    return publicKeyBits;
}

有人能帮我把SecKeyRef转换成NSString或NSData吗?

提前谢谢!

-Murali Krishnan

EN

回答 1

Stack Overflow用户

发布于 2012-06-15 19:30:24

我认为iOS生成的键缺少了世界上其他地方(在您的例子中是Java)希望看到的一些头信息。因此,为了使Java能够使用iOS安全API生成的密钥,首先需要将此头信息添加到二进制键中。

相反,为了使iOS Sec* API能够使用openssl或ssh-keygen生成的密钥(例如),您必须首先从二进制密钥中删除此头信息。

具体来说,iOS不喜欢ASN1.OID,世界其他地方也不喜欢。

请参阅本文导出用于Java应用程序使用的iOS生成的密钥--它应该会让您运行:

http://blog.wingsofhermes.org/?p=42

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10850306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档