2015-10-23 11 views
5

मैं सर्वर के लिए PHP का उपयोग करके ऑनलाइन डेटाबेस एप्लिकेशन बनाने और क्लाइंट के लिए सी # फॉर्म एप्लिकेशन बनाने का प्रयास कर रहा हूं। सर्वर पर मैं PHPSecLib के साथ एक सार्वजनिक आरएसए कुंजी का उपयोग करके एक साधारण स्ट्रिंग एन्क्रिप्ट करता हूं। फिर सी # एप्लिकेशन स्ट्रिंग प्राप्त करता है और संबंधित निजी कुंजी का उपयोग करके इसे डिक्रिप्ट करने का प्रयास करता है। बाइट्स सर्वर पर एन्कोडेड बेस 64 हैं और सी # द्वारा बाइट्स को फिर से डीकोड किया गया है। मैंने PHPSecLib का उपयोग करके कुंजी जोड़ी बनाई।System.IO.IOException: ----- अंत आरएसए निजी कुंजी नहीं मिला

public string rsa_decrypt(string encryptedText, string privateKey) { 
     byte[] bytesToDecrypt = Convert.FromBase64String(encryptedText); 
     Pkcs1Encoding decrypter = new Pkcs1Encoding(new RsaEngine()); 
     //the error occurs on this line: 
     AsymmetricCipherKeyPair RSAParams = (AsymmetricCipherKeyPair)new PemReader(new StringReader(privateKey)).ReadObject(); 

     decrypter.Init(false, RSAParams.Private); 
     byte[] decryptedBytes = decrypter.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length); 
     string decryptedString = Convert.ToBase64String(decryptedBytes); 
     return decryptedString; 
    } 

, मैं^ऊपर निर्दिष्ट लाइन पर निम्नलिखित त्रुटि मिलती है लेकिन:

इस कोड मैं ग्राहक आवेदन पर इस्तेमाल करते हैं।

प्रकार 'System.IO.IOException' की एक बिना क्रिया का अपवाद में हुई BouncyCastle.Crypto.dll

अतिरिक्त जानकारी: ----- END RSA निजी कुंजी

नहीं मिला मेरा मानना ​​है कि कुंजी जोड़ी कॉम्बो के साथ कुछ भी गलत नहीं है क्योंकि मुझे कुछ भी डिक्रिप्ट करने का प्रयास करने से पहले मुझे एक त्रुटि मिलती है। privateKey पैरामीटर वर्तमान में इस प्रारूप का उपयोग स्क्रिप्ट में hardcoded है:

string privateKey = "-----BEGIN RSA PRIVATE KEY-----XXXXXXXX-----END RSA PRIVATE KEY-----"; 

तो यह पाद लेख वास्तव में स्ट्रिंग में शामिल है ... मैं डिबग और हर जगह googled है मुझे लगता है, लेकिन मैं नहीं कर पा रहे इसे हल करो। मैं आरएसए & बाउंसीकैसल के लिए काफी नया हूं इसलिए शायद मैं गलत तरीकों का उपयोग कर रहा हूं।

आशा है कि आप मदद कर सकते हैं, धन्यवाद! - जी 4 ए

पीएस यह मेरा पहला स्टैक ओवरफ्लो प्रश्न है, मैंने अभी एक खाता बनाया है, इसलिए यदि आप मुझे इस प्रश्न को तैयार करने के तरीके पर कुछ प्रतिक्रिया भी दे सकते हैं; महान!

+2

आईआईआरसी आपको प्री-ईबी सीमा के बीच एक रेखा की आवश्यकता है; '" ----- BEGIN आरएसए निजी कुंजी ----- \ r \ nXXXXXXXX \ r \ n ----- अंत आरएसए निजी कुंजी ----- "' –

+1

एसओ, जी 4 ए में आपका स्वागत है! सवाल, अच्छा सवाल, उत्कृष्ट स्वरूपण में बहुत गड़बड़ नहीं है। आगे के सुधार के लिए चार चीजें: 1) एक वास्तविक प्रश्न के साथ समाप्त होता है (आप जानते हैं, एक प्रश्न चिह्न के साथ समाप्त होता है) 2) "आशा है कि आप मदद कर सकते हैं, धन्यवाद! -4 जीजी" की आवश्यकता नहीं है और वास्तव में पसंद नहीं है 3) पीएस प्रश्न के नीचे एक टिप्पणी होनी चाहिए और 4) उदाहरण के जवाब देकर हमें कोशिश करें और हास्य करें AlexK। जब वह एक समाधान का प्रस्ताव करता है (जिसे वह अनिश्चित है, इसलिए उत्तर के बजाय टिप्पणी)। –

+1

उस चाल ने @AlexK किया था! मैंने वास्तव में पहले ही कोशिश की थी लेकिन मैं गाड़ी की वापसी भूल गया था। क्या आप अपनी टिप्पणी हटा सकते हैं और इसे उत्तर में बना सकते हैं ताकि मैं आपको कर्म दे सकूं, या जिसे भी कहा जाता है। और धन्यवाद @ मार्टन बोडवेस मुझे याद होगा। और अंत में, देर से जवाब के लिए खेद है; मुझे लगता है कि मेरा ईमेल अभी तक ठीक से स्थापित नहीं है। – G4A

उत्तर

6

आप पूर्व/पोस्ट कैप्सूलीकरण सीमा पाठ और Base64 डेटा के बीच एक नई लाइन को जोड़ने के लिए है, तो जरूरत है:

string privateKey = "-----BEGIN RSA PRIVATE KEY-----\r\nXXX\r\n-----END RSA PRIVATE KEY-----"; 

इसका कारण यह है पीईएम विनिर्देश दोनों के बीच अन्य शाब्दिक हेडर के अस्तित्व के लिए अनुमति देता है ।

+1

प्रो टिप - सुनिश्चित करें कि आप वर्बैटिम स्ट्रिंग शाब्दिक ('@" ... "') का उपयोग नहीं करते हैं जो '\ n' और' \ r' एस्केप अनुक्रमों को अनदेखा कर देगा। –

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