![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прошу помочь с кодом, перевод типов [D7]
Urvin © (2005-01-27 23:24:00)
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 (как это сделать?), то в первом вообще никак.
Помогите пожалуйста!
Poirot (2005-01-28 12:13:00) [1]Gero © (28.01.05 12:03) [8]
Абсолютно голословные утверждения...
Хотите поспорить!? Хорошо...
Copy(CryptStr,cn,1)[1] - это выделается новый блок памяти и туда копируется блок в 1 символ и потом берём знаечение от нового буффера...
CryptStr[1] - в этом случае мы работаем с исходным блоком данных..
Есть возражения, где-то я напутал?! при условии что в первом случае используется выхзов функции, то как тут может быть принцип одинаковый?!
Суть - мы получили первый символ, а принципы получения разные!
Есть ещё вопросы?!
Gero (2005-01-28 12:03:00) [2]
> По сути да, а по принципу получения оочень разные и вещи
И по сути, и по принципу одинаковы.
Erik1 (2005-01-28 11:07:00) [3]И вобще жуть по производительности написана. Хотя бы так сделал:
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])
Poirot (2005-01-28 10:22:00) [4]Gero © (28.01.05 10:11) [4]
Не тоже:)
По сути да, а по принципу получения оочень разные и вещи.. и последнее рациональнее:)
REA (2005-01-28 10:16:00) [5]trim(IntToStr) - а Trim то зачем?
Gero (2005-01-28 10:11:00) [6]
> Copy(CryptStr,cn,1)[1] не тоже самое, что CryptStr[cn]?
То же.
Просто Джо (2005-01-28 10:09:00) [7]
> [2] REA (28.01.05 10:08)
> Copy(CryptStr,cn,1)[1] не тоже самое, что CryptStr[cn]?
Адназначна! :o)
REA (2005-01-28 10:08:00) [8]Copy(CryptStr,cn,1)[1] не тоже самое, что CryptStr[cn]?
Просто Джо (2005-01-28 00:15:00) [9]Ord ожидает аргрумент типа Char, ты ему подсовываешь строку, хоть и односимвольную:
> Ord(Copy(CryptStr,cn,1))
Нужно так:
Ord(Copy(CryptStr,cn,1)[1])
> надо из Integer перевестии в Byte (как это сделать?),
Так:
> Chr(Byte(StrToInt(Copy(Decryptstr,cn,3)))