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 или научат остальных или будут на этом деньги зарабатывать, что для конечного результата "все видят всё" безразлично.
Дальнейшее развитие — делается прога, котрая вместо теста просто посылает на сервер фио и оценку.
Со студентами (как в том анектоде) нужно "держать ухо востро". |
|
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, расшифровка: сам выведешь .
,где 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-х) в раскрытом варианте то для просмотра глазами останется всего несколько вариантов.
И вообще все это не интересно — детский сад. |
|
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) | Я использую различные значения операнда для команды
ИСКЛЮЧАЮЩЕЕ ИЛИ
для каждого символа.
В этом и есть повышение защиты. |
Защита при этом не на много повышается |
|
Guest |
Отправлено: 17.02.2006, 09:15 |
|
Не зарегистрирован
|
QUOTE |
Где это написано?
Дай ссылку
|
Жельников Владимиp "Кpиптогpафия от папиpуса до компьютеpа" М., ABF, 1996
ВВЕДЕНИЕ В КРИПТОГРАФИЮ |
|