Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2020, 15:19   #1
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию Кодирование открытого текста

Подскажите пожалуйста как происходит подобное шифрование? Как в данном коде работает исключающее (или) ch1 ИЛИ key? Как происходит преобразование и как получается такой результат защифрованоого сообщения?
Код:
using System;
class Encode {
static void Main() {
char ch1 = 'H';
char ch2 = 'i';
char ch3 = '!';
int key = 88;
Console.WriteLine("Исходное сообщение: " + ch1 + ch2 + ch3);
// Зашифровать сообщение.
ch1 = (char) (ch1 ^ key);
ch2 = (char) (ch2 ^ key);
ch3 = (char) (ch3 ^ key);
Console.WriteLine("Зашифрованное сообщение: " + ch1 + ch2 + ch3);
// Расшифровать сообщение.
ch1 = (char) (ch1 ^ key);
ch2 = (char) (ch2 ^ key);
ch3 = (char) (ch3 ^ key);
Console.WriteLine("Расшифрованное сообщение: " + ch1 + ch2 + ch3);
}
}
Ниже приведен результат выполнения этой программы.
Исходное сообщение: Hi!
Зашифрованное сообщение: □1y
Расшифрованное сообщение: Hi!

Спасибо за помощь!
bITA666 вне форума Ответить с цитированием
Старый 15.11.2020, 15:37   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,620
По умолчанию

Очень просто: ИСКЛЮЧАЮЩЕЕ ИЛИ в раскодируемом байте меняет 0 на 1 (и наоборот) в тех битах, в которых в ключе key единица, в остальных оставляется без изменения.
00100111 - раскодируемое
01000010 - ключ
01100000 - результат.
digitalis вне форума Ответить с цитированием
Старый 15.11.2020, 21:06   #3
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Очень просто: ИСКЛЮЧАЮЩЕЕ ИЛИ в раскодируемом байте меняет 0 на 1 (и наоборот) в тех битах, в которых в ключе key единица, в остальных оставляется без изменения.
00100111 - раскодируемое
01000010 - ключ
01100000 - результат.

Насчет исключающего ИЛИ я разобрался. Вопрос в другом. Я не могу понять как происходит само шифрование. ch1 = (char) (ch1 ^ key); как происходит процесс. Я так понимаю что у каждого символа типа char есть свой двоичный код?
То есть char (H) 01001000 ^ int (88) 01011000 примерно так?

Последний раз редактировалось bITA666; 15.11.2020 в 21:16.
bITA666 вне форума Ответить с цитированием
Старый 15.11.2020, 21:29   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,342
По умолчанию

digitalis, xor не так работает. Если в кодируемом байте и ключе рассматриваемый бит одинаковый, то результат 0, если разный - единица.
bITA666, код символа соответствует ASCII.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.11.2020, 21:45   #5
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
digitalis, xor не так работает. Если в кодируемом байте и ключе рассматриваемый бит одинаковый, то результат 0, если разный - единица.
bITA666, код символа соответствует ASCII.
Ну то есть я все правильно понимаю что char (H) 01001000 ^ int (88) 01011000 примерно так?
bITA666 вне форума Ответить с цитированием
Старый 15.11.2020, 21:57   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,342
По умолчанию

bITA666, в принципе правильно, если не затрагивать вопрос приведения типов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.11.2020, 22:41   #7
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
bITA666, в принципе правильно, если не затрагивать вопрос приведения типов.
Я так понимаю что после операции поразрядного оператора исключающего ИЛИ (H) 01001000 ^ int (88) 01011000 следует приведение в тип char, и результатом следует двоичный код типа char?

Последний раз редактировалось bITA666; 15.11.2020 в 22:45.
bITA666 вне форума Ответить с цитированием
Старый 15.11.2020, 22:44   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,620
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
digitalis Если в кодируемом байте и ключе рассматриваемый бит одинаковый, то результат 0, если разный - единица.
Мы с котом долго смеялись. Это одно и то же !!!
0 0 -> 0 оставляет
0 1 -> 1 инвертирует
1 0 -> 1 оставляет
1 1 -> 0 инвертирует
Красный - ключ. Впрочем, может быть и наоборот.
bITA666 не помню точно в Си, но вроде над char непосредственно можно проводить операцию ^ безо всяких приведений к int и обратно.

Последний раз редактировалось digitalis; 15.11.2020 в 23:01.
digitalis вне форума Ответить с цитированием
Старый 15.11.2020, 22:59   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,342
По умолчанию

Да, действительно одно и то же, был неправ. Не сталкивался с таким интерпретированием XOR.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.11.2020, 23:06   #10
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Ну а по сути я првильно понял из моего вопроса к вам? что после операции поразрядного оператора исключающего ИЛИ (H) 01001000 ^ int (88) 01011000 следует приведение в тип char, и результатом следует двоичный код типа char?
bITA666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача про кодирование текста захаров Паскаль, Turbo Pascal, PascalABC.NET 1 05.11.2018 12:57
Задача про кодирование текста (не получается реализовать из-за буквы ё в ascii) jihot Паскаль, Turbo Pascal, PascalABC.NET 9 29.12.2013 09:41
Проблема с получением текста HTML из уже открытого окна IE Zamozhskiy Общие вопросы .NET 2 23.09.2011 18:20
Кодирование текста Crunkordie Общие вопросы Delphi 24 12.05.2011 13:38