2009-10-19 11 views
8

पर वापस स्ट्रिंग करने के लिए जावा स्ट्रिंग मेरे पास एक क्लाइंट और सर्वर जावा एप्लिकेशन है जिसमें एक दूसरे के माध्यम से एन्क्रिप्टेड टेक्स्ट एन्क्रिप्ट किया गया है। मैं एक एक्सओआर एन्क्रिप्शन का उपयोग कर रहा हूं जो टेक्स्ट चाहता हूं उसे एन्क्रिप्ट करें।स्ट्रिंग

समस्या यह है कि readline() XORed स्ट्रिंग को स्वीकार नहीं करता है और केवल तभी होगा जब यह बाइट्स में हो।

इसलिए मैंने अपने सादे टेक्स्ट (स्ट्रिंग) को क्लाइंट साइड पर बाइट सरणी में परिवर्तित कर दिया है, और सर्वर की तरफ एक स्ट्रिंग में कनवर्ट करने का प्रयास किया है।

अफसोस की बात है कि परिणाम जो मैं ढूंढ रहा हूं वह अभी भी अस्पष्ट है और सादा पाठ जिसे मैंने खोजा है।

क्या कोई जानता है कि उपनिवेशों को मूल स्ट्रिंग में कैसे बदलना है? या क्या रीडलाइन() फ़ंक्शन के माध्यम से एक्सओआर एन्क्रिप्टेड टेक्स्ट को भेजने का कोई बेहतर तरीका है?

उत्तर

19

एक्सओआर जैसे कुछ लागू करने के बाद, आप मनमाने ढंग से बाइनरी डेटा - एन्कोडेड स्ट्रिंग के साथ समाप्त होते हैं।

मनमाने ढंग से बाइनरी को पाठ में परिवर्तित करने का पारंपरिक सुरक्षित तरीका base64 - से केवल एक नई स्ट्रिंग बनाने का प्रयास करें। तो आपकी प्रक्रिया कुछ इस तरह होगी:

  • स्ट्रिंग के रूप में सादे पाठ के साथ प्रारंभ करें।
  • यूटीएफ -8, यूटीएफ -16 या कुछ इसी तरह का उपयोग करके सादे पाठ को एन्कोड करें। प्लेटफार्म डिफ़ॉल्ट एन्कोडिंग का उपयोग करें, या ASCII जैसी कुछ भी प्रतिबंधित नहीं है। अब आपके पास बाइट सरणी है।
  • अपनी एन्क्रिप्शन लागू करें। (एक्सओआर बहुत कमजोर है, लेकिन चलो इसे एक तरफ छोड़ दें।) आपके पास अभी भी एक बाइट सरणी है।
  • स्ट्रिंग प्राप्त करने के लिए बेस 64 एन्कोडिंग लागू करें।

फिर जब आप डिक्रिप्ट करने के लिए जरूरत है ...

  • बेस 64 डिकोडिंग लागू करें एक बाइट सरणी में अपने स्ट्रिंग कन्वर्ट करने के लिए।
  • अपनी बाइनरी डिक्रिप्शन प्रक्रिया लागू करें (उदा। एक्सओआर फिर से)। आपके पास अभी भी एक बाइट सरणी है।
  • अब डीकोड कि बाइट सरणी एक स्ट्रिंग में, उदा। मूल स्ट्रिंग वापस पाने के लिए new String(data, utf8Charset) के साथ।

विभिन्न जावा बेस 64 पुस्तकालय उपलब्ध हैं, जैसे this classApache Commons Codec में। (आप encodeToString(byte[]) और decode(String) विधियों को चाहते हैं।)

+0

+1 से जवाब। @ न्यूजवाप्रोग्रामर- बेस 64 को एन्क्रिप्ट नहीं किया गया है, हालांकि यह एन्कोड किया गया है। – RichardOD

+1

@ रिचर्डोड - वास्तव में @ जॉन की विधि द्वारा निर्मित बेस 64 दोनों एन्कोडेड और एन्क्रिप्टेड है। –

+0

हाँ- मैंने किसी भी तरह से "अपनी एन्क्रिप्शन लागू करें" बिट नहीं देखा। बहुत जल्दी सुबह! – RichardOD

1

सबसे पहले, XORing एन्क्रिप्शन को कॉल न करें। गंभीरता से, यदि आपको अपने डेटा की सुरक्षा करने की आवश्यकता है तो CipherOutputStream और CipherInputStream आपके लिए हैं।

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