मेरे पास दो कुंजी, सार्वजनिक और निजी हैं, जो दोनों SecKeyRef-Variables में संग्रहीत हैं। सादगी के लिए, आइए जनता के साथ शुरू करें। मैं जो करना चाहता हूं उसे एनएसडीटा ऑब्जेक्ट में निर्यात करना है। कि के लिए, वहाँ है एक लगभग प्रसिद्ध कोड स्निपेट एप्पल, जो यहाँ है द्वारा प्रदान:आईएसओ SecKeyRef NSData
- (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;
}
मैं Xcode 4.6.2, तथापि है, और कोड गलत प्रतीत होता है ("__bridge" आईडी के लिए प्रत्येक रूपांतरण से पहले जोड़ा जाता है)। नए संस्करण इस तरह दिखता है:
- (NSData *)getPublicKeyBitsFromKey:(SecKeyRef)givenKey {
OSStatus sanityCheck = noErr;
NSData * publicKeyBits = nil;
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 *)&publicKeyBits);
if (sanityCheck != noErr)
{
publicKeyBits = nil;
}
return publicKeyBits;
}
अभी भी दो त्रुटियों, हालांकि इस प्रकार हैं: करने के लिए 'publicTag'
- उपयोग 'CFTypeRef ' (उर्फ 'स्थिरांक शून्य *') एआरसी
अब साथ स्वीकृत नहीं है तो मुझे आशा है कि आपकी मदद की, पहला मुद्दा w के बाद बीमार अब कोई समस्या नहीं है, क्योंकि मैं एक प्रश्न बनाना नहीं चाहता हूं या कुंजीपटल से कुंजी निकालने के लिए क्या नहीं करना चाहता। मेरे पास यह एक चर में है और मैं इसे वहां से निकालना चाहता हूं। परिवर्तनीय का नाम givenPublicKey
है, और यही वह कुंजी है जिसे मैं NSData में परिवर्तित करना चाहता हूं।
तो, मैं यह करने और इस एआरसी-मुद्दे को हल करने के बारे में कैसे जाउंगा?
फ़ॉलो-अप: मैं NSData करने के लिए एक निजी कुंजी निर्यात कर सकते हैं कैसे, के बाद से मैं कई बार समारोह मैं केवल के साथ काम करने की कोशिश कर रहा हूँ सार्वजनिक कुंजी के लिए काम करता है कि पढ़ा है।
क्या आप ऐप्पल के दस्तावेज़/साइट पर कोड स्निपेट का संदर्भ दे सकते हैं? – MCKapur
निश्चित रूप से, यह है: http://developer.apple.com/library/ios/#samplecode/CryptoExercise/Listings/Classes_SecKeyWrapper_m.html#//apple_ref/doc/uid/DTS40008019-Classes_SecKeyWrapper_m-DontLinkElementID_17 – arik