Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Внизвызов процедур из модуля, 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.149 c