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

Вниз

Прошу помочь с кодом, перевод типов   Найти похожие ветки 

 
Urvin   (2005-01-27 23:24) [0]

function Crypt(CryptStr: string; Passw: string): string;
var
 lentext: integer;
 lenpass: integer;
 cn: integer;
 d: string;
begin
 lentext:= length(CryptStr);
 lenpass:= length(Passw);

 for cn:= 1 to lentext do begin
   d:= trim(IntToStr(Ord(Copy(CryptStr,cn,1)) xor Ord(Copy(Passw,((cn-1) mod lenpass) + 1,1))));

   case StrToInt(d) of
     0..9 : d := "00" + d;
     10..99 : d:= "0" + d;
   end;

   result:=result + d;
 end;
end;

function Decrypt(DecryptStr: String; Passw: string): String;
var
 lentext: integer;
 lenpass: integer;
 cn: integer;
begin
 lentext:= length(DecryptStr);
 lenpass:= length(Passw);

 cn:=1;
 while cn <= lentext do begin
   result:=result + Chr(StrToInt(Copy(Decryptstr,cn,3)) xor ord(Copy(passw,(Trunc(cn/3) mod lenpass) + 1,1)));
   cn:=cn+3;
 end;
end;

В первой функции ругается на каждый ORD, а во второй - на внутренности CHR.
Если во втором что-то понятно - надо из Integer перевестии в Byte (как это сделать?), то в первом вообще никак.
Помогите пожалуйста!


 
Просто Джо ©   (2005-01-28 00:15) [1]

Ord ожидает аргрумент типа Char, ты ему подсовываешь строку, хоть и односимвольную:


> Ord(Copy(CryptStr,cn,1))


Нужно так:

Ord(Copy(CryptStr,cn,1)[1])


> надо из Integer перевестии в Byte (как это сделать?),


Так:


> Chr(Byte(StrToInt(Copy(Decryptstr,cn,3)))


 
REA   (2005-01-28 10:08) [2]

Copy(CryptStr,cn,1)[1] не тоже самое, что CryptStr[cn]?


 
Просто Джо ©   (2005-01-28 10:09) [3]


> [2] REA   (28.01.05 10:08)
> Copy(CryptStr,cn,1)[1] не тоже самое, что CryptStr[cn]?


Адназначна! :o)


 
Gero ©   (2005-01-28 10:11) [4]


> Copy(CryptStr,cn,1)[1] не тоже самое, что CryptStr[cn]?

То же.


 
REA   (2005-01-28 10:16) [5]

trim(IntToStr) - а Trim то зачем?


 
Poirot ©   (2005-01-28 10:22) [6]

Gero ©   (28.01.05 10:11) [4]
Не тоже:)
По сути да, а по принципу получения оочень разные и вещи.. и последнее рациональнее:)


 
Erik1 ©   (2005-01-28 11:07) [7]

И вобще жуть по производительности написана. Хотя бы так сделал:
Result := InputStr;
for i := 1 to Length(Result) do
Result[i] := Byte(Result[i]) xor Mask;
Тогда одна процедура на Crypt и Decrypt будет :) А Mask надо из пароля сделать как Byte(passw[(Trunc(cn/3) mod lenpass) + 1])


 
Gero ©   (2005-01-28 12:03) [8]


> По сути да, а по принципу получения оочень разные и вещи

И по сути, и по принципу одинаковы.


 
Poirot ©   (2005-01-28 12:13) [9]

Gero ©   (28.01.05 12:03) [8]
Абсолютно голословные утверждения...
Хотите поспорить!? Хорошо...
Copy(CryptStr,cn,1)[1] - это выделается новый блок памяти и туда копируется блок в 1 символ и потом берём знаечение от нового буффера...
CryptStr[1] - в этом случае мы работаем с исходным блоком данных..
Есть возражения, где-то я напутал?! при условии что в первом случае используется выхзов функции, то как тут может быть принцип одинаковый?!
Суть - мы получили первый символ, а принципы получения разные!
Есть ещё вопросы?!



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
1-1107152415
DmitryNekl
2005-01-31 09:20
2005.02.13
Включение dcu файла в exe-шник


9-1099757382
Creep
2004-11-06 19:09
2005.02.13
Rotate in OpenGL


4-1104192071
Unleashed
2004-12-28 03:01
2005.02.13
Про Usb порты


4-1103717935
malij
2004-12-22 15:18
2005.02.13
CPU


4-1103887922
cfytr
2004-12-24 14:32
2005.02.13
имитация клика