पर जेनरेट की गई सार्वजनिक कुंजी को प्रकाशित करने का तरीका पता नहीं लगा सकता है। मैं आरएसए कुंजी की एक जोड़ी बनाने के लिए आईफोन पर commoncrypto
लाइब्रेरी का उपयोग कर रहा हूं और मैं सार्वजनिक कुंजी को एक सर्वर (पायथन) भेजने की कोशिश कर रहा हूं ताकि मैं इसका उपयोग कर सकूं यह फोन से भेजे गए हस्ताक्षर को सत्यापित करने के लिए।आईफोन
मैं CommonCrypto उदाहरण से सटीक कोड का उपयोग कर रहा विधि getPublicKeyBits()
जो इस तरह दिखता है का उपयोग करते हुए:
`- (NSData ) getPublicKeyBits { OSStatus sanityCheck = noErr; एनएसडीटा publicKeyBits = शून्य; एनएसडीटा * पब्लिकटाग = [[एनएसडीएटी आवंटन] initWithBytes: publicKeyIdentifier लंबाई: 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;
} `
समस्या मैं इसे कैसे, वास्तव में, कुंजी संग्रहीत किया जा रहा है या कैसे पारित करने के लिए नहीं पता है कि है। मैं संरचना में प्राप्त करने के लिए getPublicKeyBits()
का उपयोग कर रहा हूं, और मैंने इसे base64
में एन्कोड करने के लिए एक लाइब्रेरी आयात की है। मुझे एक कुंजी मिल रही है (SHA1, मैं SHA256 पर जाना चाहता हूं, लेकिन यह काम करने के लिए यह द्वितीयक है) और base64
संस्करण अन्य कुंजियों की तरह दिखता है जो मैंने यहां पाया है और अन्य लोगों में आरएसए समस्याओं को हल करना है।
मैं पाइथन में M2Crypto
लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं और जब मैं सत्यापित करने का प्रयास करता हूं कि मुझे त्रुटि "RSA Error: No Start Line"
मिल रही है।
pubKey = request.form['publickey']
uid = uuid4().hex
while not unique(uid, User):
uid = uuid.uuid4().hex
user = User(uid, email, secret, pubKey)
और कोड मैं हस्ताक्षर की जांच करने के लिए उपयोग कर रहा हूँ:
def validate(sessionKey, sig, pem):
bio = BIO.MemoryBuffer(pem.encode('ascii'))
rsa = RSA.load_pub_key_bio(bio)
pubkey = EVP.PKey()
pubkey.assign_rsa(rsa)
pubkey.reset_context(md='sha1')
pubkey.verify_init()
pubkey.verify_update(sessionKey)
return pubkey.verify_final(sig)
मैं वास्तव में मैं क्या कर रहा हूँ के रूप में स्टम्प्ड हूँ यहाँ कोड मैं सार्वजनिक कुंजी प्राप्त करने के लिए उपयोग कर रहा हूँ है गलत कर रहा है लेकिन मुझे लगता है कि मैं करीब आ रहा हूं। अगर मेरी पूरी विधि यह नहीं है कि आप इसे कैसे करेंगे, तो मुझे फोन पर आरएसए कुंजी बनाने के लिए किसी अन्य तरीके से सुनना अच्छा लगेगा, सार्वजनिक कुंजी को सर्वर पर प्रकाशित करें, और उसके बाद उस सर्वर पर फोन से हस्ताक्षर सत्यापित करें ।
धन्यवाद!
क्या आप अपना आईओएस कोड भी पोस्ट कर सकते हैं जिसका उपयोग आप सार्वजनिक कुंजी डेटा बनाने के लिए करते हैं? – MrTJ
कोड – brennen