C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

стр.: (2) < [1] 2 >
шифрование, бонально простое и удобное шифрование
esclkm
Отправлено: 14.02.2006, 22:57


Ученик-кочегар

Группа: Участник
Сообщений: 11



Надо организавать простейшее шифрование текстового файла, его потом расшифровывать никто не станет, главное просто чтобы не смогли прочитать в исходном варианте, а с Xor подружиться не смог...

а еще как тожно передавать какую либо строку / число с одного компьютера на другой компьтер?

Заранее благодарен
BreakPointMAN
Отправлено: 15.02.2006, 00:32


Станционный диспетчер

Группа: Участник
Сообщений: 86



Шифрование XOR'ом как раз и является самым простым и банальным. Проще и банальнее некуда.
Grigoriy
Отправлено: 15.02.2006, 00:52


Мастер участка

Группа: Участник
Сообщений: 381



Это шифрование не
ИСКЛЮЧАЮЩИМ ИЛИ
а циклическим сдвигом битов байта на 4 позиции.
Для расшифровки запускаем ту же функцию.

CODE

void ShifrovanieAnsiString(AnsiString &v)
{
char* s;
unsigned int ecx_;
s=v.c_str();
ecx_=v.Length();
asm{
mov ecx,ecx_;
mov edi,s;
jecxz @2;
@1:ror byte ptr DS:[edi],4;
inc edi;
loop @1;
@2:
};
};
_NIK_
Отправлено: 15.02.2006, 01:04


Не зарегистрирован







А на фиг простое?Оно же легко ломаемо!
Но больше всего потрясла фраза:"..., его потом расшифровывать никто не станет,..."
А зачем тогда шифровать?
Grigoriy
Отправлено: 15.02.2006, 07:41


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (_NIK_ @ 15/02/2006, 01:04)
А на фиг простое?Оно же легко ломаемо!

Ну это кому как...

QUOTE
Но больше всего потрясла фраза:"..., его потом расшифровывать никто не станет,..."


Правильно, а на какой черт оно кому то нужно, что там зашифровано ?

QUOTE
А зачем тогда шифровать?


Для того, чтобы посто так невозможно было прочесть.
Grigoriy
Отправлено: 15.02.2006, 07:48


Мастер участка

Группа: Участник
Сообщений: 381



А кстати,
esclkm,
Вам какое именно нужно шифрование ?
Чтобы получившаяся строка содержала только символы того языка, на котором сообщение пишется ?
esclkm
Отправлено: 15.02.2006, 12:43


Ученик-кочегар

Группа: Участник
Сообщений: 11



Короче, немного поянию, делаю прогамму тестирования студентов — медиков /*каковым и сам являюсь*/: простой тхт они способны открыть, а с закавырками вместо текста нет... все просто... а даже если откроют, то флаг им в руки, такой найдется 1 или 2, не более.
А передавать нужно на комп сервер ФИО, название теста, время начала, время окончания, оценку.

Поэтому шифровать все равно как... главное быстро и эффективно... и без последующих проблем при загрузке из тесктового файла

Отредактировано esclkm — 15/02/2006, 12:57
Guest
Отправлено: 15.02.2006, 12:56


Не зарегистрирован







QUOTE

а даже если откроют, то флаг им в руки, такой найдется 1 или 2, не более.

Не обольщайтесть, эти 1 — 2 или научат остальных или будут на этом деньги зарабатывать, что для конечного результата "все видят всё" безразлично. smile.gif

Дальнейшее развитие — делается прога, котрая вместо теста просто посылает на сервер фио и оценку.

Со студентами (как в том анектоде) нужно "держать ухо востро". biggrin.gif
esclkm
Отправлено: 15.02.2006, 13:08


Ученик-кочегар

Группа: Участник
Сообщений: 11



Я вот и про дальнейшее развитие страшиваю...

А научить не успеют — злишком злые лаборанты... только открыли — лаборант увидел...

Grigoriy ваш код не пашет или я чего-то не понимаю

Отредактировано esclkm — 15/02/2006, 13:23
Guest
Отправлено: 15.02.2006, 13:41


Не зарегистрирован







Кусок из шифорования xor'ом (но это крайне слабый способ — не откроет только ленивый)
CODE

AnsiString text = AnsiString(ptext.c_str());
int val  = число; // в более полном варианте здесь разгоняется генератор сл.чисел

int c;
unsigned char *cp;

for (cp = text.c_str(); *cp; cp++)
{
/* Для варианта многоалфавитной замены
//    val = Rrg16_Next (base, val);
//    c   = val & 0xFF;
//    *cp ^= c;
*/
   *cp ^= val; // для вас
  if (*cp == 0x00) *cp ^= c; // у AnsiString 0 ограничивает строку
}

return text;

Код симметричный — первое выполнение шифорвание, второе — дешифровка.

"На потом" — встроить проффесиональный криптователь.

>лаборант увидел. А если не увидел?
_NIK_
Отправлено: 15.02.2006, 14:10


Не зарегистрирован







Тогда вся его система полетела на три буквы.
2 esclkm: если они на самом деле такие "нешарящие", то можешь использовать шифр простой замены. Симметричный шифр имеет формулу:
Yi = Xi + 5, расшифровка: сам выведешь smile.gif .
,где Yi, Xi порядковый номер символа в алфавите,ну а пЯтерка это соответственно offset на который сдвигается номер символа.

P.S. Простой и быстрый
_NIK_
Отправлено: 15.02.2006, 14:16


Не зарегистрирован







QUOTE (Grigoriy @ 15/02/2006, 07:41)
QUOTE (_NIK_ @ 15/02/2006, 01:04)
А на фиг простое?Оно же легко ломаемо!

Ну это кому как...

QUOTE
Но больше всего потрясла фраза:"..., его потом расшифровывать никто не станет,..."


Правильно, а на какой черт оно кому то нужно, что там зашифровано ?

QUOTE
А зачем тогда шифровать?


Для того, чтобы посто так невозможно было прочесть.

1. Кому как, но если немножко подумать, то можно вскрыть.
2. А сам-то как увидишь, что там зашифровано?
Grigoriy
Отправлено: 15.02.2006, 16:25


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (_NIK_ @ 15/02/2006, 14:16)
1. Кому как, но если немножко подумать, то можно вскрыть.

Да уж, теперь понятно.
Grigoriy
Отправлено: 15.02.2006, 16:27


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (esclkm @ 15/02/2006, 13:08)
Grigoriy ваш код не пашет или я чего-то не понимаю

Не может быть, чтоб не работал мой код, если его правильно использовать.

Как вы использовали функцию ?
_NIK_
Отправлено: 15.02.2006, 17:07


Не зарегистрирован







QUOTE (Grigoriy @ 15/02/2006, 16:25)
QUOTE (_NIK_ @ 15/02/2006, 14:16)
1. Кому как, но если немножко подумать, то можно вскрыть.

Да уж, теперь понятно.

Частоты знаков в шифрах простой замены сравниваются с таблицей частотности русских и английских букв, вроде еще есть смешанные, анализируются и по аналогии — [самый частый символ в шифротексте]=[самому частому символу в таблице] строится открытый текст.
Guest
Отправлено: 15.02.2006, 18:48


Не зарегистрирован







Какой частотный анализ? Тут не более 255 вариантов, а это и глазаньками можно отследить.
esclkm
Отправлено: 15.02.2006, 19:04


Ученик-кочегар

Группа: Участник
Сообщений: 11



Объясните мне пожалуйста, почему, когда просишь се кроме XOR, все его просто суют в нос!! неужели нет ничего другого?
Мне это просто срочно надо ч/з месяц у меня 2 конференции , те 2 проги, а насчет второй я даже еще ничего не открывал (диагностика панреатита)
Guest
Отправлено: 15.02.2006, 19:07


Не зарегистрирован







QUOTE

Симметричный шифр имеет формулу:
Yi = Xi + 5, расшифровка: сам выведешь
gvg
Отправлено: 15.02.2006, 19:35


Машинист паровоза

Группа: Участник
Сообщений: 222



QUOTE

Объясните мне пожалуйста, почему, когда просишь се кроме XOR, все его просто суют в нос!! неужели нет ничего другого?

Вы смотрели мои ответы? Никакого XOR там нет. Будьте внимательней! А уж ТРЕБОВАТЬ решение ваших задач просто некорректно. Вам никто ничего не должен! Необходимые подсказки даны...
Отвечаю на двух сайтах
_NIK_
Отправлено: 15.02.2006, 23:46


Не зарегистрирован







QUOTE (Guest @ 15/02/2006, 18:48)
Какой частотный анализ? Тут не более 255 вариантов, а это и глазаньками можно отследить.

Вообще-то текст может быть и большой, зыркать его ты зае..ся.
А какой анализ ща объясню:
1. Имеется таблица частотности знаков русского алфавита(реальную нада в книжках смотреть, но допустим такая), которая подсчитана для АБСОЛЮТНО всех текстов любых размеров, но осмысенных:
[Буква]-[Частота встречаемости]
["C"]=["0.01"]
["Е"]=["0.009"]
["Н"]=["0.008"]
["О"]=["0.007"]
["В"]=["0.006"]
["А"]=["0.005"]
["Л"]=["0.004"]
["И"]=["0.003"]
["Т"]=["0.002"]
["Р"]=["0.001"]
(Легко запоминается список самых частых букв — СЕНОВАЛИТР,частоты в примере не точные!)
2. Смотрится по шифротексту частоты каждого символа и запоминается его положение.Строится подобная таблица частотности для всех знаков в шифротексте.
3. (Непостредственный криптоанализ) Теперь просматриваем обе таблицы по-убыванию частот: Берем шифротекст и заменяем в нем все знаки, равные данному на соответствующие в таблице частотности для всех текстов(т. е. которая СЕНОВАЛИТР...).
ЧАСТОТЫ:
[ШИФРОТЕКСТ]-[ТАБЛИЦА]
[ЗНАК]=[ЧАСТОТА]-[ЗНАК]=[ЧАСТОТА]
["Z"]=[0.006]-["С"]=[0.01] //Самый частый Z, соот-но берем С
["A"]=[0.005]-["Е"]=[0.009] //Затем идет A, соот-но тут берем Е
и т. д.
Guest
Отправлено: 16.02.2006, 09:33


Не зарегистрирован







Спасибо, что такое частотный анализ знаю.
QUOTE

Вообще-то текст может быть и большой, зыркать его ты зае..ся.

Достаточно посмотреть первые 10-20 символов, возможно после удаления (или сворачивания к единственному) лидирующих (или не только) одинаковых.
А если предположить, что в тексте есть фамилия (или другая заранее известная последовательность символов), то просто её поиск по расшифорванному тексту. Здесь даже глаза не нужны.
А если применить частотный анализ последоваетльностей (хотя бы до 2-х) в раскрытом варианте то для просмотра глазами останется всего несколько вариантов.

И вообще все это не интересно — детский сад. smile.gif
Grigoriy
Отправлено: 16.02.2006, 12:08


Мастер участка

Группа: Участник
Сообщений: 381



ЗНАчит таК !

Вот мой код.
Вуалируется строка так, что никакие там частотные анализы не помогут.

Только учтите, что в шифротексте могут встречаться абсолютно любые символы, в том числе и нуль-символ и символ перехода на новую строчку...

Тестировал со строками по 10000000 символов много раз.
Работает безупречно.

Ниже я привожу подпрограмму реализующую шифрование и подпрограмму, реализующую разшифровку.
Внимательно читайте комментарии

CODE

void ShifrovanieBest(AnsiString &str,AnsiString &str1)
{
float fgr,pi_;
float v1,v2,v3;
int dfv;
unsigned int vn,h,ecx_,Randmax;
void* p1;
char* s;
char* s1;
Randmax=32767;
pi_=3.1415;
/*Эти три Шестизначные числа могут быть в принципе любыми, кроме 0
и включать не более 6 знаков (советую)
В подпрограмме расшифровки должны быть точно такие же
значения этих чисел*/
v1=3.16574;
v2=4.157;
v3=78.15767;
/*Это число может быть желательно не более 70000 и не равняться 0.
В подпрограмме расшифровки должно быть точно такое же
значение этого числа*/
vn=65000;
ecx_=str.Length();
if (!ecx_){return;};
str1.SetLength(ecx_+4);
randomize();
rand();
rand();
dfv=rand();
s=str.c_str();
s1=str1.c_str();
asm{
finit;
fild dword ptr dfv;
fidiv dword ptr Randmax;
fmul pi_;
fadd st(0),st(0);
fadd v1;
fstp fgr;
mov ecx,ecx_;
cmp byte ptr fgr,32;
ja @1;
mov byte ptr fgr,68;
@1:cmp byte ptr fgr+1,32;
ja @2;
mov byte ptr fgr+1,67;
@2:cmp byte ptr fgr+2,32;
ja @3;
mov byte ptr fgr+2,68;
@3:
mov esi,s;
mov edi,s1;
fld fgr;
fst dword ptr [edi];
add edi,4;
fsin;
fadd v1;
fsin;
fadd v2;
fsin;
fadd v3;
@8:fsin;
fimul dword ptr vn;
frndint;
fist h;
cmp h,1000;
ja @4;
add h,60125;
@4:
mov eax,h;
mov dl,[esi];
xor dl,al;
mov [edi],dl;
inc edi;
inc esi;
loop @8;
};
};

CODE

void AntiShifrovanieBest(AnsiString &str1,AnsiString &str)
{
float fgr;
float v1,v2,v3;
unsigned int vn,h,ecx_;
void* p1;
char* s;
char* s1;
/*В подпрограмме расшифровки должны быть точно такие же
значения этих четырех чисел, какие значения в подпрограмме шифрования*/
v1=3.16574;
v2=4.157;
v3=78.15767;
vn=65000;
ecx_=str1.Length();
if (!ecx_){return;};
ecx_-=4;
str.SetLength(ecx_);
s=str.c_str();
s1=str1.c_str();
asm{
mov ecx,ecx_;
finit;
mov edi,s;
mov esi,s1;
fld dword ptr [esi];
add esi,4;
fsin;
fadd v1;
fsin;
fadd v2;
fsin;
fadd v3;
@8:fsin;
fimul dword ptr vn;
frndint;
fist h;
cmp h,1000;
ja @4;
add h,60125;
@4:
mov eax,h;
mov dl,[esi];
xor dl,al;
mov [edi],dl;
inc edi;
inc esi;
loop @8;
};
};


Отредактировано Grigoriy — 16/02/2006, 12:23
Guest
Отправлено: 16.02.2006, 13:12


Не зарегистрирован







Grigoriy использует многоалфавитную замену (хором, вот если бы её еще снабдить перестановкой... а еще лучше сначала устранить избыточность) с ключем, как он думает, большой длины.
Уязвимое место (серьезно уязвимое) использования для генерации ключа стандартного rand (на него уже столько нареканий), а все остальные навороты не более чем навороты и на криптостойкость не влияют.
В условиях перехвата большого числа коротких сообщений имеющих неизменные куски (служебные слова) и зашифрованных одним ключем вскывается за вполне разумное время.
Guest
Отправлено: 16.02.2006, 13:17


Не зарегистрирован







QUOTE

Взлом шифров Энигмы шел тяжело до тех
пор, пока в 1942 году не вступили в строй несколько ЭВМ, специально
созданных для этого Аланом Тьюрингом. Это была первая в мире довольно
быстродействующая ЭВМ под названием "Колосс", специализированная для взлома шифров. После этого английские криптоаналитики могли меньше чем за день могли расколоть любую шифровку Энигмы, полученную добытыми ранее колесами, методично перебирая все возможные ключи.
Grigoriy
Отправлено: 16.02.2006, 14:18


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (Guest @ 16/02/2006, 13:12)
Grigoriy использует многоалфавитную замену (хором, вот если бы её еще снабдить перестановкой... а еще лучше сначала устранить избыточность) с ключем, как он думает, большой длины.

Многоалфавитная замена ?
Что-то не пойму, что имеется в виду под этим.
Я использую различные значения операнда для команды
ИСКЛЮЧАЮЩЕЕ ИЛИ
для каждого символа.
В этом и есть повышение защиты.

QUOTE

В условиях перехвата большого числа коротких сообщений имеющих неизменные куски (служебные слова) и зашифрованных одним ключем вскывается за вполне разумное время.


Каждую секунду ключ меняет свое значение, потому что перед использованием
rand()
выполняется
randomize()
инициализирующая генератор псевдослучайных чисел значением от таймера.
Вот если, допустим много одинаковых коротких сообщений попадет за 1 сек, когда ключ не изменится, и будет известно, что это за собщение может быть, то действительно — есть уязвимость.
Все дело заключается в том, что функция randomize() способна инициализировать генератор псевдослучайных чисел отличными друг от друга значениями не чаще чем через одну секунду.
Но я думаю, что для цели esclkm и этой защиты будет достаточно.
QUOTE

имеющих неизменные куски (служебные слова)

Вот если бы эти куски были на одних и тех же позициях, то да.
Guest
Отправлено: 16.02.2006, 15:12


Не зарегистрирован







QUOTE

Многоалфавитная замена ?
Что-то не пойму, что имеется в виду под этим.

Термин, применяемый в криптографии для обозначения такого способа шифрования.
Посмотрите тут ЭЛЕМЕНТЫ КРИПТОАНАЛИЗА и тут Симметpичные кpиптосистемы
_NIK_
Отправлено: 16.02.2006, 23:49


Не зарегистрирован







QUOTE (Guest @ 16/02/2006, 13:12)
Grigoriy использует многоалфавитную замену (хором, вот если бы её еще снабдить перестановкой... а еще лучше сначала устранить избыточность) с ключем, как он думает, большой длины.
Уязвимое место (серьезно уязвимое) использования для генерации ключа стандартного rand (на него уже столько нареканий), а все остальные навороты не более чем навороты и на криптостойкость не влияют.
В условиях перехвата большого числа коротких сообщений имеющих неизменные куски (служебные слова) и зашифрованных одним ключем вскывается за вполне разумное время.

Согласен.
_NIK_
Отправлено: 16.02.2006, 23:50


Не зарегистрирован







QUOTE (Guest @ 16/02/2006, 13:17)
QUOTE

Взлом шифров Энигмы шел тяжело до тех
пор, пока в 1942 году не вступили в строй несколько ЭВМ, специально
созданных для этого Аланом Тьюрингом. Это была первая в мире довольно
быстродействующая ЭВМ под названием "Колосс", специализированная для взлома шифров. После этого английские криптоаналитики могли меньше чем за день могли расколоть любую шифровку Энигмы, полученную добытыми ранее колесами, методично перебирая все возможные ключи.

Где это написано?
Дай ссылку
_NIK_
Отправлено: 16.02.2006, 23:53


Не зарегистрирован







QUOTE (Grigoriy @ 16/02/2006, 14:18)
Я использую различные значения операнда для команды
ИСКЛЮЧАЮЩЕЕ ИЛИ
для каждого символа.
В этом и есть повышение защиты.

Защита при этом не на много повышается biggrin.gif
Guest
Отправлено: 17.02.2006, 09:15


Не зарегистрирован







QUOTE

Где это написано?
Дай ссылку

Жельников Владимиp "Кpиптогpафия от папиpуса до компьютеpа" М., ABF, 1996
ВВЕДЕНИЕ В КРИПТОГРАФИЮ
стр.: (2) < [1] 2 >
Вернуться в Вопросы программирования в C++Builder