Главная страница
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.035 c
1-45338
michael_b
2002-10-05 19:24
2002.10.14
Как програмно отловить изменения в реестре


4-45635
dera
2002-08-07 16:06
2002.10.14
Функция, тут одна....


1-45442
DN
2002-10-01 16:43
2002.10.14
Чтение из текстового файла


1-45284
Коля Н
2002-10-02 15:14
2002.10.14
Hint на нарисованнцю кнопку.


14-45498
Digitman
2002-09-17 12:01
2002.10.14
Офисная мини-ATC Panasonic KX-T1232100DB