मैं इस कोड C#
में एक महत्वपूर्ण के साथ एक स्ट्रिंग एन्क्रिप्ट करने के लिए लिखा है:मुझे XOR एन्क्रिप्शन के साथ सहायता
private static int Bin2Dec(string num)
{
int _num = 0;
for (int i = 0; i < num.Length; i++)
_num += (int)Math.Pow(2, num.Length - i - 1) * int.Parse(num[i].ToString());
return _num;
}
private static string Dec2Bin(int num)
{
if (num < 2) return num.ToString();
return Dec2Bin(num/2) + (num % 2).ToString();
}
public static string StrXor(string str, string key)
{
string _str = "";
string _key = "";
string _xorStr = "";
string _temp = "";
for (int i = 0; i < str.Length; i++)
{
_temp = Dec2Bin(str[i]);
for (int j = 0; j < 8 - _temp.Length + 1; j++)
_temp = '0' + _temp;
_str += _temp;
}
for (int i = 0; i < key.Length; i++)
{
_temp = Dec2Bin(key[i]);
for (int j = 0; j < 8 - _temp.Length + 1; j++)
_temp = '0' + _temp;
_key += _temp;
}
while (_key.Length < _str.Length) _key += _key;
if (_key.Length > _str.Length) _key = _key.Substring(0, _str.Length);
for (int i = 0; i < _str.Length; i++)
if (_str[i] == _key[i]) { _xorStr += '0'; } else { _xorStr += '1'; }
_str = "";
for (int i = 0; i < _xorStr.Length; i += 8)
{
char _chr = (char)0;
_chr = (char)Bin2Dec(_xorStr.Substring(i, 8)); //ERROR : (Index and length must refer to a location within the string. Parameter name: length)
_str += _chr;
}
return _str;
}
समस्या यह है कि मैं हमेशा जब मैं इस कोड के साथ एक encryted पाठ डिक्रिप्ट करने के लिए चाहते हैं त्रुटि मिलती है:
string enc_text = ENCRYPT.XORENC("abc","a"); // enc_text = " ♥☻"
string dec_text = ENCRYPT.XORENC(enc_text,"a"); // ArgumentOutOfRangeException
कोई संकेत?
सभी मैं कह सकता हूँ हाँ है के लिए कुछ सरल कोड है? :) शायद यह एक शैक्षणिक अभ्यास है लेकिन आपको पात्रों को तारों में बदलने की आवश्यकता नहीं है, उन्हें मैन्युअल रूप से एक्सर करें और फिर उन्हें एक स्ट्रिंग में परिवर्तित करें। जैसा कि आपके Dec2Bin और Bin2Dec फ़ंक्शंस को साबित किया गया है, को कोस्ट्स के साथ इनट्स में परिवर्तित किया जा सकता है, इसलिए केवल स्ट्रिंग्स से चार ले जाएं, '^' xor ऑपरेटर को लागू करें और नई स्ट्रिंग में डाल दें। – tyranid
यदि आप निर्दिष्ट करते हैं कि आपको कौन सी त्रुटि मिल रही है तो यह मदद करेगा :) –
इसके अलावा, आप स्ट्रिंग्स के बजाय स्ट्रिंगबिल्डर का उपयोग करना चाह सकते हैं। स्ट्रिंग्स अपरिवर्तनीय हैं (उन्हें बदला नहीं जा सकता है), इसलिए _str + = _temp जैसी चीज़ें; हर बार एक नई स्ट्रिंग उत्पन्न करता है, जो इस विधि को अनावश्यक रूप से भारी/महंगा बनाता है। एक स्ट्रिंगबिल्डर का उपयोग करें और .एपेंड (अस्थायी)। –