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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2011, 12:13   #1
Shurik(c)
 
Регистрация: 28.05.2011
Сообщений: 9
По умолчанию Криптография

function EBlock(var Block):Boolean;
var
BBlock:TBlock absolute Block;
i:integer;
t,u,v,temp:longword;
begin
inc(BBlock[2],s[0]); B:=B+s[0];
inc(BBlock[4],s[1]); D:=D+s[1];
inc(BBlock[6],s[2]); F:=F+s[2];

for i:=1 to ROUNDSr do//2
begin
t:=goL((B*(2*B+1)), lgw);
u:=goL((D*(2*D+1)), lgw);
v:=goL((F*(2*F+1)), lgw);
A:=goL((A xor t),u)+s[2*i];
C:=goL((C xor u),v)+s[2*i+1];
E:=goL((E xor v),t)+s[2*i+2];
temp:=A;
A:=B;
B:=C;
C:=D;
D:=E;
E:=F;
F:=temp;
end;
A:=A+s[2*ROUNDSr+1];//2
C:=C+s[2*ROUNDSr+2];//3
E:=E+s[2*ROUNDSr+3];//4
BBlock[1]:=A;
BBlock[3]:=C;
BBlock[5]:=E;
Result:=true;
end;

function DBlock(var Block): Boolean;
var
BBlock:TBlock absolute Block;
i: integer;
t,u,v,temp: LongWord;
begin
BBlock[5]:=BBlock[5]-s[2*ROUNDSr+3]; E:=E-s[2*ROUNDSr+3]; //4
BBlock[3]:=BBlock[3]-s[2*ROUNDSr+2]; C:=C-s[2*ROUNDSr+2]; //3
BBlock[1]:=BBlock[1]-s[2*ROUNDSr+1]; A:=A-s[2*ROUNDSr+1]; //2

for i:=ROUNDSr downto 1 do //2
begin
temp:=F;
F:=E;
E:=D;
D:=C;
C:=B;
B:=A;
A:=temp;
v:=goL((F*(2*F+1)), lgw);
u:=goL((D*(2*D+1)), lgw);
t:=goL((B*(2*B+1)), lgw);
E:=goR((E-s[2*i+2]), t)xor v;
C:=goR((C-s[2*i+1]), v)xor u;
A:=goR((A-s[2*i]), u)xor t;
end;
F:=F-s[2];
D:=D-s[1];
B:=B-s[0];
BBlock[6]:=F;
BBlock[4]:=D;
BBlock[2]:=B;
Result:=true;
end;


Симметричный блочный шифр, не правильно расшифровывает файл, не могу понять где ошибка...goL, goR - функции сдвига влево, вправо
Shurik(c) вне форума Ответить с цитированием
Старый 13.06.2011, 13:27   #2
Shurik(c)
 
Регистрация: 28.05.2011
Сообщений: 9
По умолчанию

Немного поковырялся, исправил, но все равно не расшифровывает(((
исправленный код:
function EBlock(var Block):Boolean;
var
BBlock:TBlock absolute Block;
i:integer;
t,u,v,temp:longword;
begin
inc(BBlock[2],s[0]); B:=B+s[0];// команды делают одно и то же
inc(BBlock[4],s[1]); D:=D+s[1];
inc(BBlock[6],s[2]); F:=F+s[2];

for i:=1 to ROUNDSr do//2
begin
t:=(B*(2*B+1))shl lgw;
u:=(D*(2*D+1))shl lgw;
v:=(F*(2*F+1))shl lgw;
A:=((A xor t)shl u)+s[2*i-2];//чтоб не выйти за пределы массива
C:=((C xor u)shl v)+s[2*i-1];
E:=((E xor v)shl t)+s[2*i];
temp:=A;
A:=B;
B:=C;
C:=D;
D:=E;
E:=F;
F:=temp;
end;
A:=A+s[2*ROUNDSr+1];//2 присваиваю последние три значения из массива в
C:=C+s[2*ROUNDSr+2];//3 регистры
E:=E+s[2*ROUNDSr+3];//4
BBlock[1]:=A;// то же самое
BBlock[3]:=C;
BBlock[5]:=E;
Result:=true;
end;

function DBlock(var Block): Boolean;// повторяю ЕBlock в обратном порядке
var
BBlock:TBlock absolute Block;
i: integer;
t,u,v,temp: LongWord;
begin
BBlock[5]:=BBlock[5]-s[2*ROUNDSr+3]; E:=E-s[2*ROUNDSr+3]; //4
BBlock[3]:=BBlock[3]-s[2*ROUNDSr+2]; C:=C-s[2*ROUNDSr+2]; //3
BBlock[1]:=BBlock[1]-s[2*ROUNDSr+1]; A:=A-s[2*ROUNDSr+1]; //2

for i:=ROUNDSr downto 1 do //2
begin
temp:=F;
F:=E;
E:=D;
D:=C;
C:=B;
B:=A;
A:=temp;
v:=((F*(2*F+1))shl lgw);
u:=((D*(2*D+1))shl lgw);
t:=((B*(2*B+1))shl lgw);
E:=((E-s[2*i])shr t)xor v;
C:=((C-s[2*i-1])shr v)xor u;
A:=((A-s[2*i-2])shr u)xor t;
end;
F:=F-s[2];
D:=D-s[1];
B:=B-s[0];
BBlock[6]:=F;
BBlock[4]:=D;
BBlock[2]:=B;
Result:=true;
end;
lgw=5, ROUNDSr-динамическая переменная, A..F=BBlock[1]..BBlock[6](на всякий случай). Если нужно могу скинуть процедуру расширения ключа, там же создается массив s (массив ключей) и присваиваются начальные значения A,B,C,D(A=B,C=D),E=0,F=s[2]
Shurik(c) вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Криптография metallist85 Общие вопросы Delphi 5 28.10.2010 09:30
криптография glupayastudentka Помощь студентам 3 25.06.2009 05:00
криптография glupayastudentka Помощь студентам 0 23.06.2009 21:48
Криптография helpme Помощь студентам 8 10.11.2007 14:43