Форум: "Основная";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];
ВнизКак передать данные в процедуру ? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c