Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.026 c
2-1246452586
student_91
2009-07-01 16:49
2009.08.30
Canvas


15-1246370688
Пит
2009-06-30 18:04
2009.08.30
WEB <-> Настройки <-> БД


1-1213454201
cavalera
2008-06-14 18:36
2009.08.30
Почему не хочет загружаться процедура из dll.


15-1246480205
Юрий
2009-07-02 00:30
2009.08.30
С днем рождения ! 2 июля 2009 четверг


15-1246132501
Loginov Dmitry
2009-06-27 23:55
2009.08.30
DBF





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский