Morpheus_God
@Morpheus_God

Энкрипт и декрипт введенной строки. Как правильно?

Добрый день. Ради интереса хочу понять как обратно раскодировать введенную строку. Использую XOR.
Собственно саму строку я кое как закодировал.
А как обратно получить то что вводил ранее не могу понять.
using System;

namespace Encrypt
{
    class Program
    {
        static void Main(string[] args)
        {
            string value;
            int key = 12;
            
            Console.Write("Введите строку -->");
            value = Console.ReadLine();

            byte[] arrByte = Encoding.ASCII.GetBytes(value);

            int codes = 0;
            int encrypt = 0;
            char chr;

            for(int i = 0; i< arrByte.Length; i++)
            {
                codes = arrByte[i];
                encrypt = arrByte[i] ^ key;
                chr = (char)encrypt;
                Console.Write($"{chr}");// Просто посмотреть, что выводится после кодировки.
            }
            Console.ReadKey();
        }
    }
}

Знатоки по криптологии, просьба тапками не бить:) Это всего лишь обычный интерес.
  • Вопрос задан
  • 239 просмотров
Решения вопроса 1
borisdenis
@borisdenis
Ленив и вреден...
Поиск рулит https://habrahabr.ru/post/183462/
Шифрование

Шифрование на основе операций XOR использует свойство:
(a XOR k) XOR k = a
где k – выступает в роли ключа

Простая реализация шифрования строки:
public static byte[] encode(String pText, String pKey) {
		byte[] txt = pText.getBytes();
		byte[] key = pKey.getBytes();
		byte[] res = new byte[pText.length()];

		for (int i = 0; i < txt.length; i++) {
			res[i] = (byte) (txt[i] ^ key[i % key.length]);
		}

		return res;
	}


и дешифрования:
public static String decode(byte[] pText, String pKey) {
		byte[] res = new byte[pText.length];
		byte[] key = pKey.getBytes();

		for (int i = 0; i < pText.length; i++) {
			res[i] = (byte) (pText[i] ^ key[i % key.length]);
		}

		return new String(res);
	}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы