Текстовое поле TextBox и фильтр xor

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

Исключающая функция:

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: <Yk@*sh"~`|f}&

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

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

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


person user3000633    schedule 18.01.2014    source источник


Ответы (2)


Ваш код содержит экранированную обратную косую черту. С# преобразует \\ в один \:

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

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

string Text = @".\\MyExample.txt";
string Text = ".\\\\MyExample.txt";
person Richard    schedule 18.01.2014

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

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

\ — это escape-символ, поэтому, если бы вы отображали ".\\MyExample.txt" в текстовом поле, вы бы увидели .\MyExample.txt.

person Ed Chapel    schedule 18.01.2014