Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.181 c
15-1195783594
Forest
2007-11-23 05:06
2007.12.23
Двухядерные процессоры работают под Виндос МЕ или 9х серии ?


2-1196023535
Бэтман
2007-11-25 23:45
2007.12.23
Как проверить являеться ли строка числом ?


15-1196026503
Tos-ka
2007-11-26 00:35
2007.12.23
Подскажите условиями входит точка в тело или нет.


2-1196059598
nika
2007-11-26 09:46
2007.12.23
createprocess


15-1195559648
xayam
2007-11-20 14:54
2007.12.23
Что мне не нравится в BDS/RAD Studio?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский