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

Вниз

Как передать данные в процедуру ?   Найти похожие ветки 

 
San1712   (2008-06-06 20:01) [0]

Здраствуйте
Есть процедура с параметрами InData и OutData
___________________________________________________
procedure TDCP_rijndael.EncryptECB(const InData; var OutData);
var
 r: longword;
 tempb: array[0..MAXBC-1,0..3] of byte;
 a: array[0..MAXBC,0..3] of byte;
begin
 if not fInitialized then
   raise EDCP_blockcipher.Create("Cipher not initialized");
 PDword(@a[0,0])^:= PDword(@InData)^;
 PDword(@a[1,0])^:= PDword(dword(@InData)+4)^;
 PDword(@a[2,0])^:= PDword(dword(@InData)+8)^;
 PDword(@a[3,0])^:= PDword(dword(@InData)+12)^;
 for r:= 0 to (numrounds-2) do
 begin
   PDWord(@tempb[0])^:= PDWord(@a[0])^ xor rk[r,0];
   PDWord(@tempb[1])^:= PDWord(@a[1])^ xor rk[r,1];
   PDWord(@tempb[2])^:= PDWord(@a[2])^ xor rk[r,2];
   PDWord(@tempb[3])^:= PDWord(@a[3])^ xor rk[r,3];
   PDWord(@a[0])^:= PDWord(@T1[tempb[0,0]])^ xor
                    PDWord(@T2[tempb[1,1]])^ xor
                    PDWord(@T3[tempb[2,2]])^ xor
                    PDWord(@T4[tempb[3,3]])^;
   PDWord(@a[1])^:= PDWord(@T1[tempb[1,0]])^ xor
                    PDWord(@T2[tempb[2,1]])^ xor
                    PDWord(@T3[tempb[3,2]])^ xor
                    PDWord(@T4[tempb[0,3]])^;
   PDWord(@a[2])^:= PDWord(@T1[tempb[2,0]])^ xor
                    PDWord(@T2[tempb[3,1]])^ xor
                    PDWord(@T3[tempb[0,2]])^ xor
                    PDWord(@T4[tempb[1,3]])^;
   PDWord(@a[3])^:= PDWord(@T1[tempb[3,0]])^ xor
                    PDWord(@T2[tempb[0,1]])^ xor
                    PDWord(@T3[tempb[1,2]])^ xor
                    PDWord(@T4[tempb[2,3]])^;
 end;
 PDWord(@tempb[0])^:= PDWord(@a[0])^ xor rk[numrounds-1,0];
 PDWord(@tempb[1])^:= PDWord(@a[1])^ xor rk[numrounds-1,1];
 PDWord(@tempb[2])^:= PDWord(@a[2])^ xor rk[numrounds-1,2];
 PDWord(@tempb[3])^:= PDWord(@a[3])^ xor rk[numrounds-1,3];
 a[0,0]:= T1[tempb[0,0],1];
 a[0,1]:= T1[tempb[1,1],1];
 a[0,2]:= T1[tempb[2,2],1];
 a[0,3]:= T1[tempb[3,3],1];
 a[1,0]:= T1[tempb[1,0],1];
 a[1,1]:= T1[tempb[2,1],1];
 a[1,2]:= T1[tempb[3,2],1];
 a[1,3]:= T1[tempb[0,3],1];
 a[2,0]:= T1[tempb[2,0],1];
 a[2,1]:= T1[tempb[3,1],1];
 a[2,2]:= T1[tempb[0,2],1];
 a[2,3]:= T1[tempb[1,3],1];
 a[3,0]:= T1[tempb[3,0],1];
 a[3,1]:= T1[tempb[0,1],1];
 a[3,2]:= T1[tempb[1,2],1];
 a[3,3]:= T1[tempb[2,3],1];
 PDWord(@a[0])^:= PDWord(@a[0])^ xor rk[numrounds,0];
 PDWord(@a[1])^:= PDWord(@a[1])^ xor rk[numrounds,1];
 PDWord(@a[2])^:= PDWord(@a[2])^ xor rk[numrounds,2];
 PDWord(@a[3])^:= PDWord(@a[3])^ xor rk[numrounds,3];

 PDword(@OutData)^:= PDword(@a[0,0])^;
 PDword(dword(@OutData)+4)^:= PDword(@a[1,0])^;
 PDword(dword(@OutData)+8)^:= PDword(@a[2,0])^;
 PDword(dword(@OutData)+12)^:= PDword(@a[3,0])^;
end;
_________________________________________________
Как передать данные в процедуру с такими  параметрами ?


 
palva ©   (2008-06-06 21:42) [1]

Смотря какие данные. Можно передать массив байт или других целых, массив символов, элемент такого массива, символ строки, например s[1], может быть еще что-то. Вообще можно передать многое что, компилятор пропустит. Но не всегда это будет иметь смысл и может в иных случаях выйти боком для программы.


 
Loginov Dmitry ©   (2008-06-06 22:26) [2]

Очень странно (даже подозрительно) скрывать реальный тип поддерживаемых данных (PDWord) в функции EncryptECB и не передавать в нее размеры массивов в байтах.


 
Юрий Зотов ©   (2008-06-06 23:52) [3]

Похоже, автор очень беспокоился, что исходник процедуры каким-то образом попадет в EXE.


 
Игорь Шевченко ©   (2008-06-07 00:27) [4]


> Как передать данные в процедуру с такими  параметрами ?


var
 InData: array[0..3] of Integer;
 OutData: array[0..3] of Integer;
...
 TDCP_rijndael.EncryptECB(InData, OutData);
...
или
var
 InData: array[0..15] of Char;
 OutData: array[0..15] of Char;
...
 TDCP_rijndael.EncryptECB(InData, OutData);
...

в общем, как хочешь, только читает процедура 16 байт и пишет 16 байт


 
palva ©   (2008-06-07 00:30) [5]

Это зашифрование блока данных по AES. Длина входного и выходного блока всегда 16 байт. Использованный метод передачи параметров удобен тем, что не требуется заботиться о правильном типе при обращении к функции. То есть при шифровании большого байтового массива параметр может последовательно принимать значение a[0], a[16], a[32] и т. д. Конечно, это эквивалентно использованию Pointer, но немного проще, поскольку при обращении к функции не надо все время писать @.


 
Германн ©   (2008-06-07 00:41) [6]


> Юрий Зотов ©   (06.06.08 23:52) [3]
>
>

Похоже. И похоже на "исходники" оставляемые "временными программистами" той конторе, которая их "временно наняла".
Вроде как исходник и есть, а вроде как его и нет!


 
Игорь Шевченко ©   (2008-06-07 00:44) [7]

Германн ©   (07.06.08 00:41) [6]


> И похоже на "исходники" оставляемые "временными программистами"
> той конторе, которая их "временно наняла".
> Вроде как исходник и есть, а вроде как его и нет!


Ты неправ. Многие исходники криптоалгоритмов имеют такой вид - ну не беда это их ни разу.


 
Германн ©   (2008-06-07 00:54) [8]


> Игорь Шевченко ©   (07.06.08 00:44) [7]

Может быть и так. Я с исходниками криптоалгоритмов, как правило, не знаком.
Кроме тех, которые реализованы Turbo Power.


 
Германн ©   (2008-06-07 01:15) [9]


> Игорь Шевченко ©   (07.06.08 00:44) [7]

И всё-таки не верю!


 
Умищъ ©   (2008-06-07 18:01) [10]

А я верю! Аминь.



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1245315585
Kolan
2009-06-18 12:59
2009.08.30
Как бы все-таки получить имя функции в ран тайме?


15-1246363341
Геннадий
2009-06-30 16:02
2009.08.30
Возможно ли в Делфи сделать такое появление формы???


15-1245082595
DillerXX
2009-06-15 20:16
2009.08.30
Советский усилитель


2-1246452586
student_91
2009-07-01 16:49
2009.08.30
Canvas


1-1212999896
Separator
2008-06-09 12:24
2009.08.30
Построение и расчет графов