Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

вызов процедур из модуля, delphi   Найти похожие ветки 

 
Student00 ©   (2007-11-23 16:26) [0]

Ребята, помогите пожалуйста. Срочно нужна ваша помощь!!!

Есть модуль:

unit ucrypt;

interface
type
 TEAKey = array[0..3] of cardinal;

//Use 64-bit aligned data size (8,16...) or else some data will be left unencrypted!
procedure TEA_Encode(Input, Output: pointer; size: integer; key: TEAKey);
procedure TEA_Decode(Input, Output: pointer; size: integer; key: TEAKey);

implementation
type
 TEAData = array[0..1] of cardinal;
 PTEAKey = ^TEAKey;
 PTEAData = ^TEAData;

procedure TEA_Cipher(v: PTEAData; var w: PTEAData; k: PTEAKey);
var
 y, z, sum, delta, n: Cardinal;
begin
 y := (v)[0];
 z := (v)[1];
 sum := 0;
 delta := $9E3779B9;
 n := 32;

 while (n > 0) do
 begin
   inc(y, (z shl 4 xor z shr 5) + z xor sum + (k)[sum and 3]);
   inc(sum, delta);
   inc(z, (y shl 4 xor y shr 5) + y xor sum + (k)[sum shr 11 and 3]);
   dec(n);
 end;

 (w)[0] := y;
 (w)[1] := z;
end;

procedure TEA_DeCipher(v: PTEAData; var w: PTEAData; k: PTEAKey);
var
 y, z, sum, delta, n: Cardinal;
begin

 y := v[0];
 z := v[1];
 sum := $0C6EF3720;
 delta := $9E3779B9;
 n := 32;

 while (n > 0) do
 begin
   dec(z, (y shl 4 xor y shr 5) + y xor sum + k[sum shr 11 and 3]);
   dec(sum, delta);
   dec(y, (z shl 4 xor z shr 5) + z xor sum + k[sum and 3]);
   dec(n);
 end;

 w[0] := y;
 w[1] := z;

end;

procedure TEA_EnDec(encode: boolean; Input, Output: pointer; size: integer; key:
 TEAKey);
var
 DataIn, DataOut: TEAData;
 DOut: PTEAData;
 i, sz: integer;
begin
 DOut := @DataOut;
 sz := (size shr 3) shl 3;
 i := 0;
 repeat
   DataIn[0] := Cardinal((pointer(Cardinal(Input) + Cardinal(i)))^);
   DataIn[1] := Cardinal((pointer(Cardinal(Input) + Cardinal(i + 4)))^);
   if encode then
     TEA_Cipher(@DataIn, DOut, @key)
   else
     TEA_DECipher(@DataIn, DOut, @key);
   Cardinal(pointer(Cardinal(Output) + Cardinal(i))^) := DataOut[0];
   Cardinal(pointer(Cardinal(Output) + Cardinal(i + 4))^) := DataOut[1];
   inc(i, 8);
 until i >= sz;

end;

procedure TEA_Encode(Input, Output: pointer; size: integer; key: TEAKey);
begin
 TEA_EnDec(true, Input, Output, size, key);
end;

procedure TEA_Decode(Input, Output: pointer; size: integer; key: TEAKey);
begin
 TEA_EnDec(false, Input, Output, size, key);
end;

end.


Подключаю его в приложение посредством uses ... ucrypt;

Теперь возникла необходимость вызвать процедуры.
Алгоритм:
1)Вводим текст в
Edit1.Text

2)Кликаем по:
procedure TForm1.Button1Click(Sender: TObject);
begin
???
end;


Должна выполниться процедура из модуля:
procedure TEA_Encode(Input, Output: pointer; size: integer; key: TEAKey);

3) Результат выводим в
Edit2.Text

Была предпринята попытка сделать следующие:
procedure TForm1.Button1Click(Sender: TObject);
begin
TEA_Encode(pchar(edit1.Text), pchar(edit2.Text), inttostr(edit1.SelLength), TEAKey(0));
end;


На что программа ругается:

[Error] okno.pas(31): Incompatible types: "Integer" and "String"
[Error] okno.pas(31): Invalid typecast
[Fatal Error] ES.dpr(6): Could not compile used unit "okno.pas"


???


 
Reindeer Moss Eater ©   (2007-11-23 16:28) [1]

size: integer

inttostr(edit1.SelLength),


 
Reindeer Moss Eater ©   (2007-11-23 16:30) [2]

Плюс вот эта дурь

TEAKey(0));


 
Student00 ©   (2007-11-23 16:52) [3]

А как правильно подскажите плз!


 
Reindeer Moss Eater ©   (2007-11-23 17:00) [4]

функция ждет integer, а ты передаешь ей строку.
а как правильно надо ?


 
Dennis I. Komarov ©   (2007-11-23 17:03) [5]

> [3] Student00 ©   (23.11.07 16:52)

согласно объявлению
procedure TEA_Encode(Input, Output: pointer; size: integer; key: TEAKey);


 
clickmaker ©   (2007-11-23 17:07) [6]

а в последний параметр надо массив передать, а не 0


 
Student00 ©   (2007-11-26 20:04) [7]

Сегодня показывал этот кода препод привязался к процедуре:
procedure TEA_EnDec(encode: boolean; Input, Output: pointer; size: integer; key:
 TEAKey);
var
 DataIn, DataOut: TEAData;
 DOut: PTEAData;
 i, sz: integer;
begin
 DOut := @DataOut;
 sz := (size shr 3) shl 3;
 i := 0;
 repeat
   DataIn[0] := Cardinal((pointer(Cardinal(Input) + Cardinal(i)))^);
   DataIn[1] := Cardinal((pointer(Cardinal(Input) + Cardinal(i + 4)))^);
   if encode then
     TEA_Cipher(@DataIn, DOut, @key)
   else
     TEA_DECipher(@DataIn, DOut, @key);
   Cardinal(pointer(Cardinal(Output) + Cardinal(i))^) := DataOut[0];
   Cardinal(pointer(Cardinal(Output) + Cardinal(i + 4))^) := DataOut[1];
   inc(i, 8);
 until i >= sz;
end;


Мол чего она делает? Для чего это нужно, для чего то?

Помогите пожалуйста разобраться?


 
Slym ©   (2007-11-27 05:57) [8]

Student00 ©   (26.11.07 20:04) [7]
Мол чего она делает? Для чего это нужно, для чего то?

Не поверишь! Шифрует/дешифрует...
Это блочный алгоритм - размер блока 64бит
А эта процедура шифрует/дешифрует блоки произвольной длинны, разрезая входной блок на блоки по 64бита


 
Slym ©   (2007-11-27 06:33) [9]

Student00 ©   (26.11.07 20:04) [7]
sz := (size shr 3) shl 3;

забавный способ очистки младших битов
и вообще код в топку...
unit ucrypt;

interface
type
TEAKey = array[0..3] of cardinal;

//Use 64-bit aligned data size (8,16...) or else some data will be left unencrypted!
procedure TEA_Encode(Input, Output: pointer; size: integer; key: TEAKey);
procedure TEA_Decode(Input, Output: pointer; size: integer; key: TEAKey);

implementation
type
TEAData = array[0..1] of cardinal;
PTEAKey = ^TEAKey;
PTEAData = ^TEAData;

procedure TEA_Cipher(v,w: PTEAData; k: PTEAKey);
var
y, z, sum, delta, n: Cardinal;
begin
y := (v)[0];
z := (v)[1];
sum := 0;
delta := $9E3779B9;
n := 32;

repeat
  inc(y, (z shl 4 xor z shr 5) + z xor sum + (k)[sum and 3]);
  inc(sum, delta);
  inc(z, (y shl 4 xor y shr 5) + y xor sum + (k)[sum shr 11 and 3]);
  dec(n);
until n=0;

w[0] := y;
w[1] := z;
end;

procedure TEA_DeCipher(v,w: PTEAData; k: PTEAKey);
var
y, z, sum, delta, n: Cardinal;
begin

y := v[0];
z := v[1];
sum := $0C6EF3720;
delta := $9E3779B9;
n := 32;

repeat
  dec(z, (y shl 4 xor y shr 5) + y xor sum + k[sum shr 11 and 3]);
  dec(sum, delta);
  dec(y, (z shl 4 xor z shr 5) + z xor sum + k[sum and 3]);
  dec(n);
until n=0;

w[0] := y;
w[1] := z;
end;

procedure TEA_EnDec(encode:boolean;Input,Output: PTEAData; size:integer; const key:TEAKey);
var sz: integer;
begin
sz:=size div sizeof(TEAData);
repeat
  if encode then
    TEA_Cipher(Input, Output, @key)
  else
    TEA_DECipher(Input, Output, @key);
  inc(Input);
  inc(Output);
  dec(sz);
until sz=0;
end;

procedure TEA_Encode(Input, Output: pointer; size: integer; key: TEAKey);
begin
TEA_EnDec(true, Input, Output, size, key);
end;

procedure TEA_Decode(Input, Output: pointer; size: integer; key: TEAKey);
begin
TEA_EnDec(false, Input, Output, size, key);
end;

end.


 
Student00 ©   (2007-11-27 12:55) [10]

А как же первы две процедуры? Разве не они выполняют шифровку/дешиифровку?


> sz := (size shr 3) shl 3;
> забавный способ очистки младших битов


Тоесть очистка младших битов?
А для чего она нужна?
))


 
DiamondShark ©   (2007-11-27 12:59) [11]

Осень. Мётлы поднялись в цене.


 
Dennis I. Komarov ©   (2007-11-27 13:03) [12]

> [10] Student00 ©   (27.11.07 12:55)

Вы бы с еорией немного подружились. А то сдать (чего там) без всякого представления о криптографии да еще на скомунизденном коде о котором вы не имеете ни малейшего представления, впрочем как и о иачальных знаниях языка на котором написан этот код - ИМХО не реально, ну на крайняк "удвл." поставить если пожалеет.



Страницы: 1 вся ветка

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
15-1195850489
syte_ser78
2007-11-23 23:41
2007.12.23
windows 1.01


11-1182011558
St33l
2007-06-16 20:32
2007.12.23
ExptIntf.dcu not found


15-1195808646
Ega23
2007-11-23 12:04
2007.12.23
Где сейчас можно купиь 5 лицензий на


2-1196019346
outlaw
2007-11-25 22:35
2007.12.23
Диспетчер задач


15-1195712629
LewSavchu
2007-11-22 09:23
2007.12.23
facebook