-
Здраствуйте Есть процедура с параметрами 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; _________________________________________________ Как передать данные в процедуру с такими параметрами ?
-
Смотря какие данные. Можно передать массив байт или других целых, массив символов, элемент такого массива, символ строки, например s[1], может быть еще что-то. Вообще можно передать многое что, компилятор пропустит. Но не всегда это будет иметь смысл и может в иных случаях выйти боком для программы.
-
Очень странно (даже подозрительно) скрывать реальный тип поддерживаемых данных (PDWord) в функции EncryptECB и не передавать в нее размеры массивов в байтах.
-
Похоже, автор очень беспокоился, что исходник процедуры каким-то образом попадет в EXE.
-
> Как передать данные в процедуру с такими параметрами ?
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 байт
-
Это зашифрование блока данных по AES. Длина входного и выходного блока всегда 16 байт. Использованный метод передачи параметров удобен тем, что не требуется заботиться о правильном типе при обращении к функции. То есть при шифровании большого байтового массива параметр может последовательно принимать значение a[0], a[16], a[32] и т. д. Конечно, это эквивалентно использованию Pointer, но немного проще, поскольку при обращении к функции не надо все время писать @.
-
> Юрий Зотов © (06.06.08 23:52) [3] > >
Похоже. И похоже на "исходники" оставляемые "временными программистами" той конторе, которая их "временно наняла". Вроде как исходник и есть, а вроде как его и нет!
-
Германн © (07.06.08 00:41) [6]
> И похоже на "исходники" оставляемые "временными программистами" > той конторе, которая их "временно наняла". > Вроде как исходник и есть, а вроде как его и нет!
Ты неправ. Многие исходники криптоалгоритмов имеют такой вид - ну не беда это их ни разу.
-
> Игорь Шевченко © (07.06.08 00:44) [7]
Может быть и так. Я с исходниками криптоалгоритмов, как правило, не знаком. Кроме тех, которые реализованы Turbo Power.
-
> Игорь Шевченко © (07.06.08 00:44) [7]
И всё-таки не верю!
-
А я верю! Аминь.
|