простая программа шифрования

Модератор: Модераторы разделов

Аватара пользователя
powerfox
Сообщения: 458

простая программа шифрования

Сообщение powerfox »

У Страуструпа есть интересное упражнение - только не пойму метод шифрования:
Программа читает из cin и записывает в cout, кодом соответствующему 'c' будет c^ket[i], где key - строка, переданная в качестве аргумента ком. стр. Программа циклически перебирает символы из key, пока есть ввод.
Как будет зашифровано слово "Linux" с ключём "Unix"? :blink:
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: простая программа шифрования

Сообщение ilich »

(powerfox @ Четверг, 28 Июля 2005, 17:31) писал(а):У Страуструпа есть интересное упражнение - только не пойму метод шифрования:
Программа читает из cin и записывает в cout, кодом соответствующему 'c' будет c^ket[i], где key - строка, переданная в качестве аргумента ком. стр. Программа циклически перебирает символы из key, пока есть ввод.
Как будет зашифровано слово "Linux" с ключём "Unix"? :blink:


Это называется примитивное XOR-шифрование. Доказано, что оно очень ненадежное. :devil_2:
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
MedVed
Сообщения: 112

Re: простая программа шифрования

Сообщение MedVed »

Будет у тебя следующее.
RES = Linux ^ Unix
RES[0] = L xor U = ???
RES[1] = i xor n = ???
RES[2] = n xor i = ???
RES[3] = u xor x = ???
RES[4] = x xor U = ???
??? - берешь таблицу ASCII и вычисляешь. Битовая XOR работает так
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
И так для каждого байта (символа).

У меня другой интерес. Зависит ли результат от задействованных языковых настроек (локаль, таблицы перекодировки и т.п.)? Известно ведь, что кодовые страницы IBM, CP1251, KOI8-R отличаются друг от друга в последних 128 символах. То есть, логически мысля, с русскими символами результат должен отличаться для разных языковых настроек.
Кто/что скажет по этому поводу?
МСВС 3.0/Linux Mandrake 8.0
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian

Re: простая программа шифрования

Сообщение xorader »

koi8-r, cp1251... это ещё цветочки... ягодки - это unicode
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: простая программа шифрования

Сообщение t.t »

Кстати, Xor, тебе ведь это вопрос по профилю :D
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458

Re: простая программа шифрования

Сообщение powerfox »

Так я примерно и думал, но теперь не хочет работать ни "^", ни "xor" :(
Посмотрите, пожалуста, исходник.
Спасибо сказали:
MedVed
Сообщения: 112

Re: простая программа шифрования

Сообщение MedVed »

Стооооп... :) xor-это вообще паскалевская конструкция.
Где исходник то?
МСВС 3.0/Linux Mandrake 8.0
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458

Re: простая программа шифрования

Сообщение powerfox »

(MedVed @ Пятница, 29 Июля 2005, 18:35) писал(а):Стооооп... :) xor-это вообще паскалевская конструкция.
Где исходник то?

Не знал, что *.cpp не присоединяются - отредактировал старое сообщение.
Спасибо сказали:
MedVed
Сообщения: 112

Re: простая программа шифрования

Сообщение MedVed »

Вроде накидал. Проверить возможности нету, но по-идее должно работать.
Да, я там ";" кое-где забыл... :)
Вот это:
МСВС 3.0/Linux Mandrake 8.0
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458

Re: простая программа шифрования

Сообщение powerfox »

(MedVed @ Пятница, 29 Июля 2005, 19:20) писал(а):Вроде накидал. Проверить возможности нету, но по-идее должно работать.
Да, я там ";" кое-где забыл... :)
Вот это:

Спасибо, сегодня опробую

powerfox добавил в 29.07.2005 21:34

Я поправил синтаксис - компайлится, но не работает("Segmantation fault")
Проблема при преобразовании типов.
А что конкретно делает 'c' ^ 'q' - складывает коды бкв, или что?
Если сделать ('c' ^ 'q') ^ 'q' - должно получиться 'c'

powerfox добавил в 29.07.2005 21:41

Не работает сам бинарник - "Segmentation Fault", проблема при преобразовании типов.
А что конкретно происходит при 'c' ^ 'w'
По Страустр. ('c' ^ 'w') ^'w' = 'c'
Спасибо сказали:
MedVed
Сообщения: 112

Re: простая программа шифрования

Сообщение MedVed »

Почитал я на досуге свой код и ужаснулся :)
В общем, вот 100% рабочий файл на С++ (проверил на MS Visual C++ и g++ в Linux Mandrake 8.0).

По поводу:
Если сделать ('c' ^ 'q') ^ 'q' - должно получиться 'c'


Логическая операция "ИСКЛЮЧАЮЩЕЕ ИЛИ" (^ в С/С++) является обратимой. Т.е. если x ^ y = z, то z ^ y = x. Не спрашивай, почему так получается - это свойство функции ИСКЛЮЧАЮЩЕЕ ИЛИ (вроде 2*2=4).
Вообще если это тебе интересно то почитай что-то вроде булевой алгебры или дискретной математики.
МСВС 3.0/Linux Mandrake 8.0
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: простая программа шифрования

Сообщение t.t »

(MedVed @ Суббота, 30 Июля 2005, 15:47) писал(а):Не спрашивай, почему так получается - это свойство функции ИСКЛЮЧАЮЩЕЕ ИЛИ (вроде 2*2=4).
Вовсе даже и не свойство. Это лемма, которая очень просто выводится из определения операции (а не функции, по ходу) исключающего или.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
TIM
Сообщения: 91
ОС: FreeBSD

Re: простая программа шифрования

Сообщение TIM »

Проверенный способ, в своё время - когда ключ являлся стартовым состоянием для статистического генератора псевдослучайных чисел, по которому, собственно, далее и XOR'ились данные :)
Спасибо сказали: