iPhone:Как экспортировать SecKeyRef или NSData, содержащие биты открытого ключа, в формат PEM?

. Я создал пару ключей, используя SecKeyGeneratePair. Теперь я хотел бы передать открытый ключ на сервер, но я не совсем уверен, как это сделать.

У меня есть функция getPublicKeyBits(, взятая изCryptoExercise)Apple, но я действительно не знаю, что делать с необработанными 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.

7
задан Dr. Acula 18 April 2012 в 04:28
поделиться