2011-06-08 15 views
6

मैं प्रोजेक्ट पर काम कर रहा हूं जिसमें एंड्रॉइड एपीके पर हस्ताक्षर करने के लिए उपयोग किए जाने वाले सार्वजनिक कुंजी डेटा को शामिल करना शामिल है। मैं सार्वजनिक कुंजी के रूप में हस्ताक्षर सफलतापूर्वक निकालने में सक्षम हूं। जब मैं इस द्वारा उत्पादित बाइनरी पबकी फाइलों के अंदर देखता हूं, तो मुझे कुछ सादे-पाठ जैसे नाम और शहर दिखाई देता है।आरएसए सार्वजनिक कुंजी से डेटा निकालने

मैं PHP (या यहां तक ​​कि जावा या सी #) का उपयोग करके सार्वजनिक कुंजी के अंदर एम्बेडेड इस नाम/शहर की जानकारी को सुरक्षित रूप से कैसे निकाला जा सकता हूं? और उम्मीद है कि इस तरह से मुझे पता है कि वास्तव में क्या इन क्षेत्रों रहे हैं में कर (यानी आँख बंद करके पाठ हथियाने नहीं है, लेकिन यह जानकर कि किस स्ट्रिंग एक शहर है और जो एक नाम है)

स्पष्टीकरण के लिए: मैं नहीं है निजी कुंजी या प्रमाणपत्र फ़ाइल। मैं वर्तमान में किसी भी चीज़ पर हस्ताक्षर करने या एन्क्रिप्ट करने में रूचि नहीं रखता हूं, मैं सिर्फ रीजिक्स जैसे क्लूडी दृष्टिकोणों का उपयोग किये बिना पब्की के अंदर सादे टेक्स्ट निकालना चाहता हूं।

अद्यतन: यहाँ मेरी APK की

MIICBzCCAXCgAwIBAgIES6KlazANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQGEwJVUzELMAkGA1UECBMCUkkxFTATBgNVBAcTDE5hcnJhZ2Fuc2V0dDEVMBMGA1UEAxMMQ29saW4gTydEZWxsMB4XDTEwMDMxODIyMTI1OVoXDTQ1MDMwOTIyMTI1OVowSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlJJMRUwEwYDVQQHEwxOYXJyYWdhbnNldHQxFTATBgNVBAMTDENvbGluIE8nRGVsbDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmPetcBW+ITURXY0LsI2ZfgM3R7K2kwicgpd0W+BYAXQBh76SXyN9MYvtfnUY3SNz37FW/lDQgAO3pbhEFqGwfADh2ctXlYmlE9DtcRQw0ojGVPIDlWBX+9IUxyL/89CPaN84R/1lvdosco4V0BqQYR300S9ZwmwFA2Vh9hSUZmsCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBezKu4G11Z68NTPIBro8xsnbkdYxObzW7BsSr6t9MS5x6EQVs75R/nnKrsMcQ+9ImdT940jhQgZT3ZrYla5VhdbelxnLhBVbJfBdipV3Hv2bG7MnXzFqHYwQqYp+UrP8zWm1YHQf5I/P9VBjlkgwFyNKr0TxP4t/qS08oGX2wvZg== 
+0

Regex kludgy है? :( – FlyingStreudel

+0

क्या आप "इस द्वारा उत्पादित बाइनरी पबकी फाइल" का उदाहरण पोस्ट कर सकते हैं? इसे पोस्ट-सक्षम टेक्स्ट में बदलने के लिए बेस -64 एन्कोडिंग का उपयोग करें। – erickson

+0

@FlyingStreudel - Regex निश्चित रूप से कई परिदृश्यों में उपयोगी हो सकता है, लेकिन मैं ' टी लगता है कि यह इस कार्य के लिए उपयुक्त है: पी –

उत्तर

3

आपके द्वारा डाली गई स्ट्रिंग बेस 64 एन्कोडेड x509 प्रमाण पत्र है, न केवल सार्वजनिक कुंजी।

वांछित जानकारी प्राप्त करने के लिए आपको विशिष्ट नाम फ़ील्ड को पार्स करने की आवश्यकता होगी। एक X.509 प्रमाणपत्र है

using System; 
using System.Security.Cryptography.X509Certificates; 

namespace Sample 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     string base64EncodedX509 = 
      "MIICBzCCAXCgAwIBAgIES6KlazANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQGEwJVUzELMAkGA1UECBMCUkkxFTATBgNVBAcTDE5hcnJhZ2Fuc2V0dDEVMBMGA1UEAxMMQ29saW4gTydEZWxsMB4XDTEwMDMxODIyMTI1OVoXDTQ1MDMwOTIyMTI1OVowSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlJJMRUwEwYDVQQHEwxOYXJyYWdhbnNldHQxFTATBgNVBAMTDENvbGluIE8nRGVsbDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmPetcBW+ITURXY0LsI2ZfgM3R7K2kwicgpd0W+BYAXQBh76SXyN9MYvtfnUY3SNz37FW/lDQgAO3pbhEFqGwfADh2ctXlYmlE9DtcRQw0ojGVPIDlWBX+9IUxyL/89CPaN84R/1lvdosco4V0BqQYR300S9ZwmwFA2Vh9hSUZmsCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBezKu4G11Z68NTPIBro8xsnbkdYxObzW7BsSr6t9MS5x6EQVs75R/nnKrsMcQ+9ImdT940jhQgZT3ZrYla5VhdbelxnLhBVbJfBdipV3Hv2bG7MnXzFqHYwQqYp+UrP8zWm1YHQf5I/P9VBjlkgwFyNKr0TxP4t/qS08oGX2wvZg=="; 
     var rawBytes = Convert.FromBase64String(base64EncodedX509); 

     X509Certificate cert = new X509Certificate(rawBytes); 

     // Parse the distinguished name to get your desired fields 

     Console.WriteLine(cert.Subject); // writes CN=Colin O'Dell, L=Narragansett, S=RI, C=US 
     Console.WriteLine(cert.Issuer); // writes CN=Colin O'Dell, L=Narragansett, S=RI, C=US 
    } 
} 
} 
+0

यह एकदम सही :) सूचित किया जा रहा मैं वास्तव में था एक प्रमाणपत्र, मैं एक ऐसी ही पीएचपी समाधान '$ dataAsArray = openssl_x509_parse (openssl_x509_read ($ pemFormattedCertString)) का उपयोग कर डेटा डंप करने के लिए के साथ आया था के बाद है,' –

0

PHP में से एक से एक नमूना (base64 एनकोडेड) सार्वजनिक कुंजी है, मुझे यकीन है कि नहीं कर रहा हूँ लेकिन शायद this function अपने दोस्त हो सकता है। एसएसएल संबंधित कार्यों का whole section है जो कि यदि आप प्रमाण पत्र के साथ खेल रहे हैं तो काम में आ सकते हैं।

+0

शायद, लेकिन मेरे पास केवल सार्वजनिक कुंजी है और पूर्ण प्रमाण पत्र नहीं है। मैं पहले उस फ़ंक्शन सूची के माध्यम से स्किम किया था, लेकिन वह कुछ भी नहीं ढूंढ पाया जो विशेष रूप से चाहता था। शायद मुझे कुछ याद आया? –

1

"द्वारा इस उत्पादित द्विआधारी pubkey फ़ाइलें":

यहाँ एक सी # उदाहरण है।

बस किसी भी मंच के बारे में X.50 9 प्रमाण पत्र पढ़ने और उनके द्वारा एक संरचना बनाने के लिए समर्थन है, जिससे आप विश्वसनीय रूप से "विषय का नाम" निकाल सकते हैं और अक्सर विस्तारित जानकारी जिसमें ईमेल पता या होस्ट नाम शामिल होता है।

उदाहरण के लिए, यदि आप OpenSSL स्थापित किया है, निम्न आदेश का उपयोग:

openssl x509 -text -noout -inform der -in <yourfilehere> 

आप अतिरिक्त विकल्पों के साथ विशिष्ट क्षेत्रों निकाल सकते हैं। उदाहरण के लिए, -subject पैदावार जोड़ने:

विषय =/सी = अमेरिका/अनुसूचित जनजाति = आरआई/एल = Narragansett/CN = कॉलिन ओ'डेल

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