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