![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Шифрование... [D5, D6, Win95/98, WinXP]
^SANYA © (2002-10-05 01:15:00)Помогите пожалуйста с такой вот штукой...
Суть в том, чотбы отладить шифровалку в 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 символов шифровать не умеет....
Vlad1 (2002-10-06 12:19:00) [1]См.
http://www.pisoft.ru/verstak/kriptogr_1.htm
yaJohn (2002-10-05 17:46:00) [2]>Мол, Pchar ограничен только размерами памяти компа, а String типа слабее...
Ну ежели 4 гига вам маловато будет, то пожалуй...
^SANYA (2002-10-05 15:43:00) [3]Штука в том, что мне сказали делать через PChar...
Мол, Pchar ограничен только размерами памяти компа, а String типа слабее...
Это правда?
yaJohn (2002-10-05 13:10:00) [4]Мн... ИМХО
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 и возвращает необходимый размер. Собственно, любой вызов ВинАПИ возвращающий строку работает примерно так...
Ученик (2002-10-05 08:27:00) [5]Ответил же уже, скорее всего связано с #0 символом
^SANYA (2002-10-05 08:23:00) [6]Никто не поможет???
Или ночка тёмная выдалась...