C # простое пользовательское шифрование - PullRequest
1 голос
/ 22 февраля 2012

Я делаю простое пользовательское шифрование в C # .NET, шифрование проходит успешно, но расшифровка идет не так.Алгоритм очень интуитивно понятен, но я не знаю, почему он расшифрован неправильно.Вот мой код:

 private void button1_Click(object sender, RoutedEventArgs e)
        {
            //Encrypting 
            byte[] initial_text_bytes = Encoding.UTF8.GetBytes(initial_text_tb.Text);
            byte[] secret_word_bytes = Encoding.UTF8.GetBytes(secret_word_tb.Text);
            byte[] encrypted_bytes = new byte[initial_text_bytes.Length];




            int secret_word_index = 0;
            for (int i=0; i < initial_text_bytes.Length; i++)
            {
                if (secret_word_index == secret_word_bytes.Length)
                {
                    secret_word_index = 0;
                }
                encrypted_bytes[i] = (byte)(initial_text_bytes[i] + initial_text_bytes[secret_word_index]);
                secret_word_index++;
            }



          //  String s = Encoding.UTF8.GetString(encrypted_bytes);
                //new String(Encoding.UTF8.GetChars(encrypted_bytes));

            text_criptat_tb.Text = Convert.ToBase64String(encrypted_bytes);


        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            //Decrypting
            byte[] initial_text_bytes = Encoding.UTF8.GetBytes(text_criptat_tb.Text);
            byte[] secret_word_bytes = Encoding.UTF8.GetBytes(secret_word_tb.Text);
            byte[] encrypted_bytes = new byte[initial_text_bytes.Length];

            int secret_word_index = 0;
            for (int i = 0; i < initial_text_bytes.Length; i++)
            {
                if (secret_word_index == secret_word_bytes.Length)
                {
                    secret_word_index = 0;
                }
                encrypted_bytes[i] = (byte)(initial_text_bytes[i] - initial_text_bytes[secret_word_index]);
                secret_word_index++;
            }
           // String s = new String(Encoding.UTF8.GetChars(encrypted_bytes));

            initial_text_tb.Text = Convert.ToBase64String(encrypted_bytes);


        }

И это то, что я получаю, когда шифрую: After encrypting И вот когда я дешифрую: After decrypting Спасибо

1 Ответ

5 голосов
/ 22 февраля 2012

Я вижу четыре проблемы с кодом.

1. Вы добавляете байты из исходного текста вместо секретного слова.

Здесь:

encrypted_bytes[i] = (byte)(initial_text_bytes[i] + initial_text_bytes[secret_word_index]);

Используйте вместо:

encrypted_bytes[i] = (byte)(initial_text_bytes[i] + secret_word_bytes[secret_word_index]);

2. Вы используете Encoding.UTF8.GetBytes, чтобы попытаться декодировать строку base-64.

Здесь:

byte[] initial_text_bytes = Encoding.UTF8.GetBytes(text_criptat_tb.Text);

Вместо этого используйте:

byte[] initial_text_bytes = Convert.FromBase64String(text_criptat_tb.Text);

3. Вы вычитаете байты из начального текста и секретного слова.

Здесь:

encrypted_bytes[i] = (byte)(initial_text_bytes[i] - initial_text_bytes[secret_word_index]);

Используйте вместо:

encrypted_bytes[i] = (byte)(initial_text_bytes[i] - secret_word_bytes[secret_word_index]);

4. Вы используете Convert.ToBase64String, чтобы попытаться декодировать данные UTF-8.

Здесь:

initial_text_tb.Text = Convert.ToBase64String(encrypted_bytes);

Используйте вместо:

initial_text_tb.Text = Encoding.UTF8.GetString(encrypted_bytes);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...