2014-01-18 2 views
1

моя проблема сегодня в C#. Я делаю xor crypt для своих текстовых строк и хочу сделать для него генератор, но мой TextBox с исходным текстом возвращает дифференциальную строку, а результат не соответствует действительности.TextBox text и xor filter

функция Xor:

private string GetText(byte[] Text) 
{ 
    byte[] Key = { 0x12, 0x05, 0x52 }; 
    // ---- 
    for (int i = 0; i < Text.Length; i++) 
    { 
     Text[i] ^= Key[i % 3]; 
    } 
    // ---- 
    return Encoding.ASCII.GetString(Text); 
} 

Истинный результат:

string Text = ".\\MyExample.txt"; 
textBox2.Text = GetText(Encoding.ASCII.GetBytes(Text)); //Result: <[email protected]*sh"~`|f}& 

Ложные результат:

string Text = textBox1.Text; //Text: ".\\MyExample.txt" 
textBox2.Text = GetText(Encoding.ASCII.GetBytes(Text)); //Result: <Y_|jd?bi7<q*f 

Почему я получить разные результаты, и как это исправить?

ответ

2

Ваш код содержит скрытую обратную косую черту. C# является преобразование \\ к одному \:

string Text = ".\\MyExample.txt"; // Text == ".\MyExample.txt" 

Если вы хотите текст, чтобы содержать \\, используйте один из следующих способов:

string Text = @".\\MyExample.txt"; 
string Text = ".\\\\MyExample.txt"; 
+0

Спасибо, моя глупая ошибка. – user3000633

1

Текст, который вы определяете в первом образце не так же, как текст, поступающий из TextBox.

string Text = ".\\MyExample.txt"; 
string TextBoxText = textBox1.Text; // is actually ".\\\\MyExample.txt" 

\ является маскирующим, таким образом, если вы должны были отображать ".\\MyExample.txt" в вашем TextBox, вы увидите .\MyExample.txt.