iPhone:你如何导出SecKeyRef或包含公开密钥位为PEM格式的一个NSData?(iPho

2019-07-29 00:42发布

我创建了一个对使用密钥SecKeyGeneratePair 。 我现在想通过公共密钥服务器,但我真的不知道如何着手。

我有一个函数getPublicKeyBits (从苹果公司的采取CryptoExercise ),但我真的不知道做什么用的原料NSData的事。 下面是函数:

- (NSData *)getPublicKeyBits {
    OSStatus sanityCheck = noErr;
    NSData* publicKeyBits = nil;
    NSData* publicTag = [[NSData alloc] initWithBytes:publicKeyIdentifier length:sizeof(publicKeyIdentifier)];
    CFDataRef cfresult = NULL;


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

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

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


    if (sanityCheck != noErr)
    {
        publicKeyBits = nil;
    }
    else 
    {
        publicKeyBits = (__bridge_transfer NSData *)cfresult;
    }

    return publicKeyBits;
}

如何利用这个原始字节的数据,并把它变成像PEM或一个加密库了解一些其他的格式? 我应该Base64编码呢? 是否有其他的事情,我需要做的呢?

如果有帮助,我试图使用与公共密钥M2Crypto可供Python库。

Answer 1:

我想你会想在看http://www.openssl.org/docs/crypto/pem.html#可能:

int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
                                    unsigned char *kstr, int klen,
                                    pem_password_cb *cb, void *u);


Answer 2:

这个页面有包装你有到PEM格式的数据,所以你可以将它发送到服务器的一些伟大的秘诀和示例代码:

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

你并不需要整个OpenSSL库从源代码编译和静态链接到做到这一点。 我只使用这种技术,包装底座64键入“----- BEGIN PUBLIC KEY -----”,并且它可以被读取,并通过使用标准的红宝石OpenSSL的类Rails应用程序使用。



文章来源: iPhone: How do you export a SecKeyRef or an NSData containing public key bits to the PEM format?