2012-06-01 11 views
9

अब मुझे अपनी सार्वजनिक कुंजी में कोई समस्या है, मैंने सार्वजनिक और निजी उत्पन्न करने के लिए SecKeyGeneratePair का उपयोग किया। अब मुझे सर्वर पर अपनी सार्वजनिक कुंजी भेजनी है। मैंने SecKeyRef को NSData में परिवर्तित करने के लिए नीचे दी गई विधि का उपयोग किया है, वहां हमेशा मुझे एक ही सार्वजनिक कुंजी मिल रही है। हालांकि मैंने इसे बेस 64 प्रारूप में परिवर्तित कर दिया और इसे सर्वर पर भेज दिया। लेकिन यह बिल्कुल काम नहीं कर रहा है और सर्वर (जावा) त्रुटियों को फेंकना शुरू कर देता है।आईओएस SecKeyRef (पब्लिक की) इसे सर्वर पर भेजें

- (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; 
} 

किसी भी एक मेरी मदद कर सकते NSString या NSData करने SecKeyRef कन्वर्ट करने के लिए: यहाँ मेरी आईओएस कोड है।

अग्रिम धन्यवाद !!!

-Murali कृष्णन

+0

डुप्लीकेट के रूप में इस अचिह्नित करने के लिए यह संभव है? जावा सर्वर के साथ आईओएस जेनरेट आरएसए कुंजी-जोड़े का उपयोग करने के लिए यहां उपयोग के लिए सही जवाब हैं, लेकिन लिंक किया गया प्रश्न नहीं है। – mikeho

उत्तर

9

मुझे लगता है कि आईओएस द्वारा उत्पन्न कुंजी कुछ हेडर सूचना है कि दुनिया (आपके मामले में जावा एपीआई) के बाकी को देखने की उम्मीद याद कर रहे हैं। इसलिए, जावा के लिए आईओएस सुरक्षा एपीआई द्वारा उत्पन्न कुंजी के साथ काम करने के लिए, आपको सबसे पहले को हेडर जानकारी बाइनरी कुंजी में जोड़ने की आवश्यकता है।

इसके विपरीत, आईओएस सेक * एपीआई के लिए आदेश openssl या ssh-keygen (उदाहरण के लिए) द्वारा उत्पन्न एक प्रमुख के साथ काम करने में, आपको पहले द्विआधारी कुंजी से हेडर सूचना को निकालना होगा

विशेष रूप से, आईओएस एएसएन.1 ओआईडी पसंद नहीं करता है, और बाकी दुनिया करता है।

एक जावा अनुप्रयोग द्वारा उपयोग के लिए एक iOS-जनरेट की गई कुंजी निर्यात करने के लिए यह लेख देखें - यह मिलना चाहिए तुम जा:

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

+0

यह भी देखें [क्रिस ल्यूक का ब्लॉग] (http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/) – bobobobo

+0

अच्छा, यह उत्तर वास्तव में उपयोग के मामले में मदद करता है साथ में। – mikeho

संबंधित मुद्दे