Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дешифровка по кодовому слову [D7]


Страницы:   1 2 3 4

Инокентий ©   (2012-10-23 12:30:00) 

Доброго времени суток читающему это сообщение. перейду сразу к вопросу - нужно найти правильный метод шифрования.
У меня имеется всё, кроме самого метода, имеется оригинальный текст, ключевое слово из 16 символов (4 по 4 через -) и зашифрованный текст.
Пожалуйста, если есть чем помочь, буду очень благодарен.

По заявлению преподавателя тут всё очень просто, неделю разбирался, ничего не могу сделать подходящее, могу выслать свои пробы, но боюсь будете смеятся.


AV   (2012-10-25 14:40:00) [41]


> из Война и Мир

ну, не очень большой, конечно, если :)


AV   (2012-10-25 14:37:00) [42]


> Инокентий

Пока не за что. Просто стало интересно. Попробую тоже.
>> могу отправить отрывок из
ты не спрашивай - приводи тут сразу.
может еще кто попробовать захочет, ему тоже слать будешь что ли..

Фактически, есть только один пример. Как можно предполагать - непонятно.
Вдруг алгоритм там
Если (ТЕХT1), то ответить (TEXT2), иначе вообще не шифровать? :)


Инокентий   (2012-10-25 14:11:00) [43]

Кстати если поможет могу отправить отрывок из Война и Мир зашифрованных ключём ABCD-EFGH-IKLM-NOPQ


Инокентий   (2012-10-25 14:02:00) [44]

> AV ©   (25.10.12 13:02) [23]

> напиши
> Как можно больше примеров

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

> AV< спасибо


Инокентий   (2012-10-25 13:56:00) [45]

Больше нет никаких вариантов-предложений??


AV   (2012-10-25 13:02:00) [46]


> Я уже к преподавателю обращался несколько раз у меня есть
> несколько готовых(шифр+ключ=зашифровка), могу написать их

напиши
Как можно больше примеров

а также, если можно, зашифрованный текст для следующего
оригинала
ABCDEFGHIJKLMNOP
PONMLKJIHGFEDCBA
AAAAAAAAAAAAAAAA
ZZZZZZZZZZZZZZZZ
при ключах
ABCD-EFGH-IJKL-MNOP
PONM-LKJI-HGFE-DCBA
AAAA-AAAA-AAAA-AAAA
ZZZZ-ZZZZ-ZZZZ-ZZZZ
т.е. должно быть 4 зашифрованных текста

или хотя бы 2, ключами
ABCD-EFGH-IJKL-MNOP
AAAA-AAAA-AAAA-AAAA


Инокентий   (2012-10-24 20:24:00) [47]

Rouse_Спасибо, буду изучать)))

Ega23методом подбора я пытался код текста выше, пока только так пытался,код программы, который я указал ранее, я делал в самом начале когда у меня было только 2 варианта шифрованного текста, пытался найти методом подбора и сложения, если в одном примере вроде находишь подходящие X, то когда применяешь под другой текст и тоже ключевое слово, то подходящее Х не подходит!


Ega23   (2012-10-24 20:13:00) [48]


> это задание дано нам на пол года

За полгода можно и перебором сделать.


Rouse_   (2012-10-24 18:53:00) [49]


> а мыслей по этому вопросу нет)

Ну тогда бери мое решение и изучай...


Инокентий   (2012-10-24 17:06:00) [50]

это задание дано нам на пол года, пока учимся, мышление улучшается(Ну так должно быть) и в конце концов мы должны решить эту задачу, конец года через 2 месяца а мыслей по этому вопросу нет))) Методы Полларда, линейного/дифференциального анализа мы не проходили.


Rouse_   (2012-10-23 22:02:00) [51]

ЗЫ: а вообще вас как-то по глупому криптоанализу учат...
Методы Полларда, линейного/дифференциального анализа проходили?


Rouse_   (2012-10-23 21:57:00) [52]

Чет сложный у тебя алго.

Оть смотри.

Оригинальный текст:
aaaaaaaaaaaaaaaa
ssssssssssssssss
dddddddddddddddd
ffffffffffffffff

Шифрованный:
тттттттттттттттт
аааааааааааааааа
чччччччччччччччч
хххххххххххххххx

Ключевое слово:
kkkk-kkkk-kkkk-kkkk

Делаем анализ:

procedure TForm1.Button1Click(Sender: TObject);

 function Foo(A, B: Char): Byte;
 begin
   Result := Byte(A) xor Byte(B);
 end;

var
 D1, D2, D3, D4: Byte;
begin
 D1 := Foo('a', 'т');
 D2 := Foo('s', 'а');
 D3 := Foo('d', 'ч');
 D4 := Foo('f', 'х');
 ShowMessage(Format('%d, %d, %d, %d, char = %s', [D1, D2, D3, D4, Char(D1)]));
end;


Видим что результат каждого ксора 147. Значит как минимум алго ксора вычислен верно, теперь осталось поймать ключ.
Т.к. Char(D1) не совпадает с ключем k, то считаем что над ним производились преобразования например такого вида:
Byte(KeyChar) xor 248
Соответственно код трансформа блока будет примерно таким:

procedure TForm1.Button2Click(Sender: TObject);

 function Transform(const Data, Key: AnsiString): AnsiString;
 var
   I, KeyCursor, KeyLength, RealKey: Integer;
 begin
   SetLength(Result, Length(Data));
   KeyCursor := MaxInt;
   KeyLength := Length(Key);
   for I := 1 to Length(Data) do
   begin
     if (KeyCursor mod 5) = 0 then
       Inc(KeyCursor);
     if KeyCursor > KeyLength then
       KeyCursor := 1;
     RealKey := Byte(Key[KeyCursor]) xor 248;
     Inc(KeyCursor);
     Result[I] := AnsiChar(Byte(Data[I]) xor RealKey);
   end;
 end;

const
 Key = 'kkkk-kkkk-kkkk-kkkk';
var
 RealData, Encrypted, Decrypted: AnsiString;
begin
 RealData :=
   'aaaaaaaaaaaaaaaa' +
   'ssssssssssssssss' +
   'dddddddddddddddd' +
   'ffffffffffffffff';
 Encrypted := Transform(RealData, Key);
 Decrypted := Transform(Encrypted, Key);
 ShowMessage(Encrypted);
 ShowMessage(Decrypted);
end;


Инокентий   (2012-10-23 21:31:00) [53]

код программы, который я указал ранее, я делал в самом начале когда у меня было только 2 варианта шифрованного текста, пытался найти методом подбора и сложения, если в одном примере вроде находишь подходящие X, то когда применяешь под другой текст и тоже ключевое слово, то подходящее Х не подходит!


Инокентий   (2012-10-23 21:27:00) [54]

Я могу вам выдать любой зашифрованный текст по любому вашему ключевому слову, которое состоит из 16 символом если это поможет в поиске метода.
Я уже к преподавателю обращался несколько раз у меня есть несколько готовых(шифр+ключ=зашифровка), могу написать их или какие вы попросите, он сам сказал обращаться к нему за этим, чтобы нам проще было. и ещё преподаватель как то так сказал - почему все просят только текст, причём почти одинаковый, никто не спрашивал ни символы ни числа ни тот же хекс...  Интересно зачем это он сказал, жаль дословности точной не помню, может запутать хочет или к чему бы ему это.   Прикольный он )))


Инокентий   (2012-10-23 21:19:00) [55]

Оригинальный текст:
aaaaaaaaaaaaaaaa
ssssssssssssssss
dddddddddddddddd
ffffffffffffffff

Шифрованный:
тттттттттттттттт
аааааааааааааааа
чччччччччччччччч
хххххххххххххххx

Ключевое слово:
kkkk-kkkk-kkkk-kkkk

Код программы(только не смейтесь):


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, XPMan, ExtCtrls;

type
 TForm1 = class(TForm)
   pgc1: TPageControl;
   ts1: TTabSheet;
   mmo2: TMemo;
   mmo1: TMemo;
   btn1: TButton;
   edt1: TEdit;
   ts2: TTabSheet;
   mmo3: TMemo;
   mmo4: TMemo;
   edt2: TEdit;
   btn2: TButton;
   lbl1: TLabel;
   lbl2: TLabel;
   tmr1: TTimer;
   lbl3: TLabel;
   tmr2: TTimer;
   lbl4: TLabel;
   procedure btn1Click(Sender: TObject);
   procedure btn2Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure TrimWorkingSet;
   procedure tmr1Timer(Sender: TObject);
   procedure edt1KeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
   procedure tmr2Timer(Sender: TObject);
   procedure edt2KeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
        private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 x:Integer=0;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
mmo2.Text:='';
x:=0;
tmr1.Enabled:=True;
end;

procedure TForm1.btn2Click(Sender: TObject);
var
s,pass :string;
i,j,h,b:Integer;
begin
mmo4.Text:='';
x:=36;
tmr2.Enabled:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.DoubleBuffered:=true;
TrimWorkingSet;

end;

procedure TForm1.TrimWorkingSet;
var MainHandle: THandle;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
SetProcessWorkingSetSize(MainHandle, DWORD(-1), DWORD(-1));
CloseHandle(MainHandle);
end;
end;

procedure TForm1.tmr1Timer(Sender: TObject);
var
s,pass :string;
i,j,h,b:Integer;
begin
X:=x+1;
s:=mmo1.Text;
i:=Length(s);
pass:=edt1.Text ;
j:=Length(pass);
h:=Round(i/j);
for b:=1 to h do
pass:=pass+pass;
pass:=Copy(pass,1,i);
for b:=1 to i do
begin
if ((Ord(s[b])+ord(pass[b])))>255 then
mmo2.text:=mmo2.text+' '+chr((Ord(s[b])+ord(pass[b]))-255+x)
else
mmo2.Text:=mmo2.text+' '+chr((Ord(s[b])+ord(pass[b]))+x);
lbl3.Caption:='X= '+inttostr(x);
end;
end;

procedure TForm1.edt1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if (key=32)and (tmr1.Enabled=True) then
tmr1.Enabled:=False
else
tmr1.Enabled:=True;
end;

procedure TForm1.tmr2Timer(Sender: TObject);
var
s,pass :string;
i,j,h,b:Integer;
begin
X:=x;
s:=mmo3.Text;
i:=Length(s);
pass:=edt2.Text ;
j:=Length(pass);
h:=Round(i/j);
for b:=1 to h do
pass:=pass;
pass:=Copy(pass,1,i);
for b:=1 to i do
begin
if (Ord(s[b])-ord(pass[b]))<1 then
mmo4.text:=mmo4.text+chr((Ord(s[b])-ord(pass[b]))+255-x)
else
mmo4.Text:=mmo4.text+chr((Ord(s[b])-ord(pass[b])-x));
lbl1.Caption:=IntToStr((Ord(s[b])));
lbl4.Caption:='X= '+inttostr(x);
end;
end;

procedure TForm1.edt2KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if (key=32)and (tmr2.Enabled=True) then
tmr2.Enabled:=False
else
tmr2.Enabled:=True;
end;

end.

Что скажите?


Ega23   (2012-10-23 15:34:00) [56]


> Ну тогда со своей стороны могу предположить то, что преподжаватель
> мог дать студенту текст, шифротекст и открытый ключ, и речь
> идет не о симметричном методе, как предполагается в [1].


Я вот тут что подумал. Если бы я был преподавателем и предмет был программированием, то я бы сделал вот что.
То, что я писал в [9]. При этом - в функции шифрования добавить соль, например
Функция шифрования F: код конечного символа = (код символа исходного текста + код символа ключа + соль) mod 42
И задачей бы сказал найти эту самую соль.
Т.е. исходные данные:
1. Таблица кодов литералов
2. Функция шифрования с неизвестной солью
3. Ключ шифрования.
4. Исходный текст
5. Шифрованный текст.

ИМХО, это нормальная домашняя задачка для семинара.

А вот данные, как у ТС - это уже на курсовую может потянуть.


И. Павел   (2012-10-23 14:50:00) [57]

> [11] Ega23 ©   (23.10.12 14:32)

Ну тогда со своей стороны могу предположить то, что преподжаватель мог дать студенту текст, шифротекст и открытый ключ, и речь идет не о симметричном методе, как предполагается в [1].


Ega23   (2012-10-23 14:32:00) [58]


> Ключевая фраза в моем предположении:

Эта ключевая фраза зависит от миллиона факторов, начиная от распухшего ЧСВ препода, и заканчивая темами, разбираемыми на семинарах.
Мне (почему-то) кажется, что данная тема - таки разбиралась.


И. Павел   (2012-10-23 14:24:00) [59]

> [9] Ega23 ©   (23.10.12 13:39)

Ключевая фраза в моем предположении: если преподаватель сказал, что «всё очень просто».


Ega23   (2012-10-23 13:39:00) [60]


> Ну если преподаватель сказал, что «всё очень просто», то
> не думаю, что он ожидает, что студент переберет 10-20 кодировок.
>

Не в кодировках дело, они тут вообще не при чём.
Допустим, есть множество кодируемых символов
1 - '1'
2 - '2'
...
9 - '9'
10 - 'А'
11 - 'Б'
....
42 - 'Я'

Есть исходный текст "МАМА МЫЛА РАМУ"
Есть ключ "ПАПЫ ПИЛИ ПИВО"
Функция шифрования F: код конечного символа = (код символа исходного текста + код символа ключа) mod 42

Т.е. всё зависит от количества символов в кодовой таблице и порядке их расположения.

Дальше. Автор говорит, что у него ключ - 4 группы по 4 символа. Может быть шифровать по очереди. Может, первые 4 символа шифруются первой группой, вторые - второй, и т.д. Может быть всё сообщение сначала шифруется первой группой, потом всё сообщение - второй и т.д.

Вариантов - масса.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо