2011-11-03 7 views
14

मैं इस कोड का उपयोग एक स्ट्रिंग एन्क्रिप्ट करने के लिए करने के लिए बाइट सरणी परिवर्तित करने के लिए उपयोग करने के लिए (मूल रूप से, इस Rijndael class on MSDN पर दिए गए उदाहरण है) एक स्ट्रिंग के लिए बाइट सरणी लेकिन मुझे यकीन नहीं है कि यह एक अच्छा समाधान है। मेरा लक्ष्य फाइलों में एन्क्रिप्टेड टेक्स्ट (जैसे पासवर्ड ...) को स्टोर करना है। क्या मुझे Encoding.Default के साथ जारी रखना चाहिए या Encoding.UTF8Encoding या कुछ और उपयोग करना चाहिए?एन्कोडिंग स्ट्रिंग और उपाध्यक्ष प्रतिकूल

क्या संग्रहीत मूल्यों पर नकारात्मक परिणाम हो सकते हैं जब मैं अलग-अलग ओएस पर फ़ाइलों को स्थानांतरित करने पर उन्हें एन्क्रिप्ट करने और डिक्रिप्ट करने का प्रयास करता हूं?

उत्तर

43

आपको बिल्कुलEncoding का उपयोग मनमाने ढंग से बाइनरी डेटा को पाठ में बदलने के लिए करना चाहिए। Encoding तब होता है जब आपके पास बाइनरी डेटा होता है जो वास्तव में एन्कोडेड टेक्स्ट होता है - यह नहीं है।

इसके बजाय, Convert.ToBase64String का उपयोग बाइनरी डेटा को टेक्स्ट के रूप में एन्कोड करने के लिए करें, फिर Convert.FromBase64String का उपयोग करके डीकोड करें।

+0

धन्यवाद जॉन। मुझे गंभीर कीड़े से बचाता है। – Otiel

+9

यह भी देखें [फिल हैक की पोस्ट इस पर विस्तार कर रही है] (http://feeds.haacked.com/~r/haacked/~3/5hyXGYRO0Bo/hazards-of-converting-binary-data-to-a-string.aspx) –

+0

यह भी देखें http://stackoverflow.com/questions/646974/is-there-a- मानक- तकनीक-for-packing-binary-data-into-a-utf-16- स्ट्रिंग –

0

हां, Encoding.Default आपकी मशीन का वर्तमान एएनएसआई कोड पृष्ठ है और यह कई मशीनों/लोकेशंस के बीच भी अलग हो सकता है। यदि डेटा टेक्स्ट डेटा था और इसे पोर्टेबल बनाने के लिए, आपको एक निश्चित एन्कोडिंग प्रारूप का उपयोग करना होगा, उदाहरण के लिए यूटीएफ 8।

हालांकि, अपने डेटा डेटा शाब्दिक नहीं है, तब तक आप कोशिश करते हैं और किसी भी शाब्दिक एन्कोडिंग का उपयोग एक स्ट्रिंग में बदलने के लिए नहीं कर सकते। सबसे अच्छा विकल्प हैक्स या बेस 64 एन्कोडिंग का उपयोग करना या इसे ब्लॉब/बाइट सरणी के रूप में रखना है।

+0

यह स्पष्ट रूप से * नहीं * टेक्स्टुअल डेटा है - यह एन्क्रिप्शन करने का नतीजा है, इसलिए यह मनमाना बाइनरी डेटा है। कोई भी 'एन्कोडिंग' यहां अनुचित है। –

+0

हाँ, एक बार मुझे स्पष्ट किया गया कि मुझे पता था कि डेटा बिल्कुल टेक्स्ट नहीं था। – Deanna

-1

im नहीं 100% यकीन है कि यहाँ लेकिन मैं कि Encoding.Default प्रणाली डिफ़ॉल्ट एन्कोडिंग को संदर्भित करता है लगता है और हाँ कि व्यवस्था करने के लिए सिस्टम से बदल सकते हैं ..

तो मैं जहां मैं UTF8 या कुछ अन्य एन्कोडिंग का प्रयोग करेंगे उस विस्तारित ascii के बारे में अधिक जानकारी के लिए सिस्टम से व्यवस्था करने के लिए परिवर्तन नहीं करता है ..

इधर देखो

http://en.wikipedia.org/wiki/Extended_ASCII

+1

नहीं है, UTF-8 का उपयोग कर * नहीं * एक अच्छा समाधान है - यह बाइनरी डेटा * नहीं * UTF-8 एन्कोडेड है; यह मनमाने ढंग से बाइनरी डेटा है। –