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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.04.2010, 14:39   #1
arthur457
 
Регистрация: 17.03.2009
Сообщений: 5
Радость нужно разобратся с кодом

Мне нужно разобратся с этим кодом, желательно комментарии над каждой строчки кода
arthur457 вне форума
Старый 03.04.2010, 14:39   #2
arthur457
 
Регистрация: 17.03.2009
Сообщений: 5
По умолчанию

unit max_unit;

interface

const STRT_E = $0b0b;
const STRT_D = $b1b1;
const NMBR = 11;
type word32 = LongWord ;
Pword32 = ^word32;
Word32Arr = array of word32;
u1 = Byte;
twy_ctx = record
k,ki:Word32Arr;//2+1
ercon,drcon:Word32Arr;//NMBR+1
end;


procedure mu(var a:Word32Arr);
procedure gamma(var a:Word32Arr);
procedure theta(var a:Word32Arr);
procedure rndcon_gen(strt:word32;var rtab:Word32Arr);
procedure twy_key(var c:twy_ctx; var key:Word32Arr);
procedure encrypt(c:twy_ctx; var a:Word32Arr);
procedure twy_enc(var c:twy_ctx; var data:Word32Arr;blkcnt:integer);
procedure twy_dec(var c:twy_ctx; var data:Word32Arr;blkcnt:integer);
procedure decrypt(c:twy_ctx; var a:Word32Arr);


implementation

procedure mu(var a:Word32Arr);
var i:integer;
b:array[0..2] of word32;
begin
b[0] := 0;
b[1] := 0;
b[2] := 0;
for i:=0 to 31 do
begin
b[0] := b[0] shl 1;
b[1] := b[1] shl 1;
b[2] := b[2] shl 1;
if (a[0] and 1)<>0 then b[2] := b[2] or 1;
if (a[1] and 1)<>0 then b[1] := b[1] or 1;
if (a[2] and 1)<>0 then b[0] := b[0] or 1;
a[0] := a[0] shr 1;
a[1] := a[1] shr 1;
a[2] := a[2] shr 1;
end;
a[0] := b[0];
a[1] := b[1];
a[2] := b[2];
end;


procedure gamma(var a:Word32Arr);
var b:array[0..2] of word32;
begin
b[0] := a[0] xor (a[1] or (not a[2]));
b[1] := a[1] xor (a[2] or (not a[0]));
b[2] := a[2] xor (a[0] or (not a[1]));
a[0] := b[0];
a[1] := b[1];
a[2] := b[2];
end;

procedure theta(var a:Word32Arr);
var b:array[0..2] of word32;
begin
b[0] := a[0] xor (a[0] shr 16) xor (a[1] shl 16) xor (a[1] shr 16) xor (a[2] shl 16) xor
(a[1] shr 24) xor (a[2] shl 8) xor (a[2] shr 8) xor (a[0] shl 24) xor
(a[2] shr 16) xor (a[0] shl 16) xor (a[2] shr 24) xor (a[0] shl 8);
b[1] := a[1] xor (a[1] shr 16) xor (a[2] shl 16) xor (a[2] shr 16) xor (a[0] shl 16) xor
(a[2] shr 24) xor (a[0] shl 8) xor (a[0] shr 8) xor (a[1] shl 24) xor
(a[0] shr 16) xor (a[1] shl 16) xor (a[0] shr 24) xor (a[1] shl 8);
b[2] := a[2] xor (a[2] shr 16) xor (a[0] shl 16) xor (a[0] shr 16) xor (a[1] shl 16) xor
(a[0] shr 24) xor (a[1] shl 8) xor (a[1] shr 8) xor (a[2] shl 24) xor
(a[1] shr 16) xor (a[2] shl 16) xor (a[1] shr 24) xor (a[2] shl 8);
a[0] := b[0];
a[1] := b[1];
a[2] := b[2] ;
end;

procedure pi_1(var a:Word32Arr);
begin
a[0] := (a[0] shr 10) xor (a[0] shl 22);
a[2] := (a[2] shl 1) xor (a[2] shr 31);
end;

procedure pi_2(var a:Word32Arr);
begin
a[0] := (a[0] shl 1) xor (a[0] shr 31);
a[2] := (a[2] shr 10) xor (a[2] shl 22);
end;

procedure rho(var a:Word32Arr);

begin
theta(a);
pi_1(a);
gamma(a);
pi_2(a);
end;

procedure rndcon_gen(strt:word32;var rtab:Word32Arr);
var i:integer;
begin
for i:=0 to NMBR do
begin
rtab[i] := strt;
strt := strt shl 1 ;
if (strt and $10000)<>0 then strt := strt xor $11011 ;
end;
end;

procedure encrypt(c:twy_ctx; var a:Word32Arr);
var i:integer;
begin
for i:=0 to NMBR-1 do
begin
a[0] :=a[0] xor c.k[0] xor (c.ercon[i] shl 16) ;
a[1] :=a[1] xor c.k[1];
a[2] :=a[2] xor c.k[2] xor c.ercon[i];
rho(a) ;
end;
a[0] :=a[0] xor c.k[0] xor (c.ercon[NMBR] shl 16) ;
a[1] :=a[1] xor c.k[1];
a[2] :=a[2] xor c.k[2] xor c.ercon[NMBR] ;
theta(a) ;
end;

procedure decrypt(c:twy_ctx; var a:Word32Arr);
var i:integer;
begin
mu(a);
for i:=0 to NMBR-1 do
begin
a[0] :=a[0] xor c.ki[0] xor (c.drcon[i] shl 16) ;
a[1] :=a[1] xor c.ki[1];
a[2] :=a[2] xor c.ki[2] xor c.drcon[i];
rho(a);
end;
a[0] :=a[0] xor c.ki[0] xor (c.drcon[NMBR] shl 16) ;
a[1] :=a[1] xor c.ki[1];
a[2] :=a[2] xor c.ki[2] xor c.drcon[NMBR] ;
theta(a);
mu(a);
end;

Последний раз редактировалось arthur457; 03.04.2010 в 14:42.
arthur457 вне форума
Старый 03.04.2010, 14:40   #3
arthur457
 
Регистрация: 17.03.2009
Сообщений: 5
По умолчанию

procedure twy_key(var c:twy_ctx; var key:Word32Arr);
begin
c.ki[0] := key[0];
c.k[0] := key[0];
c.ki[1] := key[1];
c.k[1] := key[1];
c.ki[2] := key[2];
c.k[2] := key[2];
theta(c.ki);
mu(c.ki);
rndcon_gen(STRT_E,c.ercon);
rndcon_gen(STRT_D,c.drcon);
end;

procedure twy_enc(var c:twy_ctx; var data:Word32Arr;blkcnt:integer);
var i,k:integer;
temp:Word32Arr;
begin
SetLength(temp,3);
k:=0;
for i:=0 to blkcnt-1 do
begin
temp[0] := data[k];
temp[1] := data[k+1];
temp[2] := data[k+2];
encrypt(c,temp);
data[k] := temp[0];
data[k+1] := temp[1];
data[k+2] := temp[2];
k:=k+3;
end;
temp := nil;
end;

procedure twy_dec(var c:twy_ctx; var data:Word32Arr;blkcnt:integer);
var i,k:integer;
temp:Word32Arr;
begin
SetLength(temp,3);
k:=0;
for i:=0 to blkcnt-1 do
begin
temp[0] := data[k];
temp[1] := data[k+1];
temp[2] := data[k+2];
decrypt(c,temp);
data[k] := temp[0];
data[k+1] := temp[1];
data[k+2] := temp[2];
k:=k+3;
end;
temp := nil;
end;

procedure twy_destroy(var c:twy_ctx);
var i:integer;
begin
for i:=0 to 2 do
begin
c.k[i] := 0;
c.ki[i] := 0;
end;
end;

end.
arthur457 вне форума
Старый 03.04.2010, 14:43   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

столь ужасный код(оформление) за бесплатно даже смотреть не хочу.
глаза жалко(про время вообще молчу).
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите разобратся Irina.is Microsoft Office Excel 1 17.06.2009 22:38
Помогите разобратся с заданием Veselyn Помощь студентам 3 06.05.2009 16:49
помогите разобратся с ListView Icor Win Api 3 01.05.2009 16:24
Разобратся в Unicode компоненты aizon Помощь студентам 9 24.03.2008 11:25
Помогите разобратся!!! rex2003 Свободное общение 1 18.02.2007 20:37