Stworzyłem parę kluczy za pomocą SecKeyGeneratePair
. Chciałbym teraz przekazać klucz publiczny do serwera, ale nie jestem pewien, jak postępować.iPhone: Jak wyeksportować klucze publiczne SecKeyRef lub NSData zawierające klucze publiczne do formatu PEM?
Mam funkcję getPublicKeyBits
(pobraną z Apple CryptoExercise
), ale tak naprawdę nie wiem, co zrobić z surowym NSData. Oto funkcja:
- (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;
}
Jak mogę wziąć tego surowego bajt danych i przekształcić go w coś takiego PEM
lub innego formatu, że biblioteka kryptograficzna rozumie? Czy powinienem ją kodować64? Czy są jeszcze inne rzeczy, które muszę zrobić?
Jeśli to pomaga, próbuję użyć klucza publicznego z biblioteką M2Crypto
dostępną dla języka Python.
Nie, to nie BASE64. Jest to pewna struktura ASN.1 zawierająca 'SEQUENCE' z dwoma elementami' INTEGER'. Podczas gdy drugi element wydaje się zawsze "65537", drugi element wydaje się mieć rozmiar klucza. Ale wciąż nie mam pojęcia, jak pobrać wykładnik i modulo, aby wyeksportować go do innego formatu. – miho