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

Вниз

Шифрование...   Найти похожие ветки 

 
^SANYA ©   (2002-10-05 01:15) [0]

Помогите пожалуйста с такой вот штукой...
Суть в том, чотбы отладить шифровалку в PChar"ах...:
function Encrypt(const InString : PChar; StartKey : Word): PChar;
const
MultKey = 32142; // Mult default key
AddKey = 11719; // Add default key
var
OutString : PChar;
I : word;
begin
Result := InString;
I := 0;
while InString[i] <> #0 do
begin
Result[i] := Chr(Byte(InString[I]) xor (StartKey shr 8));
StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
inc(i);
end;

// Result[i] := #0;

end;


{$R-}
{$Q-}
function Decrypt(const InString : PChar; StartKey : Word): PChar;
const
MultKey = 32142; // Mult default key
AddKey = 11719; // Add default key
var
I : word;
begin
// приравниваем размеры строк, так как 1 входной символ равен 1-му исходящему(зашифрованному)
Result := InString;
i := 0;
while InString[i] <> #0 do
begin
Result[i] := Chr(Byte(InString[I]) xor (StartKey shr 8));
StartKey := (Byte(InString[I]) + StartKey) * MultKey + AddKey;
inc(i);
end;
Result[i] := #0;
end;
{$R+}
{$Q+}

Глючит потихоньку....
То символ лишний припишет(видно связано с #0-символом), то больше че 220 символов шифровать не умеет....


 
^SANYA ©   (2002-10-05 08:23) [1]

Никто не поможет???
Или ночка тёмная выдалась...


 
Ученик ©   (2002-10-05 08:27) [2]

Ответил же уже, скорее всего связано с #0 символом


 
yaJohn ©   (2002-10-05 13:10) [3]

Мн... ИМХО function func(params....):PChar; - не есть гуд. Равно как и PChar1:=PChar2. Хотя и работает. Иногда.
Почему бы не работать с нормальными строками? Хотя бы внутри функции, а в/из PChar переводить их на входе/выходе. У родного string нет проблем с #0. И интуиция мне подсказывает, что Chr(Byte(InString[I]) xor (StartKey shr 8)); выдаст рано или поздно #0 посреди строки со всеми вытекающими последствиями.
Коли уж очень надо работать в стиле АПИ - ИМХО лучше:
function Encrypt(var InData; const InSize: integer; var OutData; var OutSize: integer; StartKey : Word): integer;OutSize проверяется на достаточность размера OutData и возвращает необходимый размер. Собственно, любой вызов ВинАПИ возвращающий строку работает примерно так...



 
^SANYA ©   (2002-10-05 15:43) [4]

Штука в том, что мне сказали делать через PChar...
Мол, Pchar ограничен только размерами памяти компа, а String типа слабее...
Это правда?


 
yaJohn ©   (2002-10-05 17:46) [5]

>Мол, Pchar ограничен только размерами памяти компа, а String типа слабее...
Ну ежели 4 гига вам маловато будет, то пожалуй...


 
Vlad1 ©   (2002-10-06 12:19) [6]

См.
http://www.pisoft.ru/verstak/kriptogr_1.htm



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
1-45462
Nayfl
2002-10-01 19:13
2002.10.14
С имитировать нажатия на Enter


3-45232
wed
2002-09-24 10:11
2002.10.14
Записи с расчетными полями


1-45378
Tzota
2002-10-04 16:37
2002.10.14
Выполнение командной строки


1-45305
BOA_KAA
2002-10-04 17:18
2002.10.14
Триангуляция Делоне в Delphi


1-45240
Шурик Ш
2002-10-02 12:09
2002.10.14
Хранение доп. полей для узлов TreeView