我使用SecKeyGeneratePair
創建了一對密鑰。我現在想將公鑰傳遞給服務器,但我不確定如何繼續。iPhone:如何將SecKeyRef或包含公鑰位的NSData導出爲PEM格式?
我有一個功能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編碼嗎?我還需要做其他事情嗎?
如果有幫助,我試圖使用Python的公鑰M2Crypto
。
不,它不是BASE64。它是一些ASN.1結構,包含一個帶有兩個'INTEGER'元素的'SEQUENCE'。雖然第二個元素似乎總是「65537」,但其他元素似乎具有密鑰大小。但我仍然不知道如何獲得指數並從它們中取出來將其導出爲另一種格式。 – miho 2014-03-02 14:58:22