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

Вниз

Аномальные явления в функциях шифрации/дешифрации строк   Найти похожие ветки 

 
Dr. Genius   (2006-09-11 08:39) [0]

Здравствуйте!

Привожу ниже текст модуля шифрации/дешифрации строк. Пробую зашифровать с помощью функции Encrypt строку ‘Это строка’, но функция шифрует только слово ‘Это’. Вообще подобную картину я встречаю во всех функциях шифрации строк, которые мне попадаются. Некоторые строки отлично шифруются/дешифруются, но другие почему-то нет (шифруются, а следовательно и дешифруются не полностью). Почему так происходит? Можно ли это исправить?

unit Crypt32;

interface

const
 StartKey = 981;        { Start default key }
 MultKey  = 12674;      { Mult default key }
 AddKey   = 35891;      { addd default key }

function Encrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
function Decrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;

implementation

{$R-}
{$Q-}

function Encrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
var
 I : Integer;
begin
 Result := "";
 for I := 1 to Length(InString) do
 begin
   Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
   StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
 end;
end;

function Decrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
var
 I : Integer;
begin
 Result := "";
 for I := 1 to Length(InString) do
 begin
   Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
   StartKey := (Byte(InString[I]) + StartKey) * MultKey + AddKey;
 end;
end;

{$R+}
{$Q+}

end.


Мне нужна нормальная функция шифрации/дешифрации строк. Чтобы работала со всеми строками, и чтобы можно было самому задавать ключи. Кто может поделиться такой?


 
umbra ©   (2006-09-11 10:14) [1]


> Пробую зашифровать с помощью функции Encrypt строку ‘Это
> строка’, но функция шифрует только слово ‘Это’.

А как Вы это определили?


 
Наиль ©   (2006-09-11 10:21) [2]

> Вообще подобную картину я встречаю во всех функциях шифрации
> строк, которые мне попадаются

Код проверки этих функций помог бы больше, чем код самих функций.


 
Рамиль ©   (2006-09-11 10:35) [3]

При шифровании появляются символы #0, которые означают конец строки. Соот. дешифруется только до первого #0.


 
Elen ©   (2006-09-11 10:36) [4]


> Dr. Genius

У меня работает правильно. (WinXP). Как вы вызываете шифровку\дешифровку?


 
Elen ©   (2006-09-11 10:37) [5]


> Рамиль ©

Это влияло бы будь тип результата pchar


 
Elen ©   (2006-09-11 10:38) [6]


> Dr. Genius

А в принципе стоит на всякий случай проверять в цикле на наличие chr(0)


 
MBo ©   (2006-09-11 10:42) [7]

>Рамиль ©   (11.09.06 10:35) [3]
Это не так.
Символы #0 не мешают дешифрованию, т.к. не влияют на Length.
А вот при выводе на экран зашифрованной строки это может сказаться.


 
Наиль ©   (2006-09-11 10:46) [8]

Наконец и до меня дошло.
Дело действительно в #0.
Скорее всего проверка делается следующим образом:
Edit1.Text:=Encrypt(...);

Прежде чем вывести текст на экран Windows преобразует строку к PChar.
На этом этапе и возникает потеря текста.
Чтобы в этом убедиться достаточно результат сохранить в файл и просмотреть его любым вьювером (Hex-редактором).


 
Рамиль ©   (2006-09-11 11:03) [9]


> Символы #0 не мешают дешифрованию, т.к. не влияют на Length.
>
> А вот при выводе на экран зашифрованной строки это может
> сказаться.

Угу, не проснулся я еще:)


 
Dr. Genius   (2006-09-11 11:29) [10]

Проверяю я это способом Edit1.Text:=Encrypt(...), а потом пытаюсь делать Decrypt полученной шифрованной строки.


 
umbra ©   (2006-09-11 11:39) [11]

Dr. Genius   (11.09.06 11:29) [10]

Вам уже тут все рассказали. В приведенном Вами примере третий символ шифрованной строки  - \0, а половина других - непечатные, поэтому в эдите Вы ее не увидите. Лучше хранить шифрованную строку в отдельной строковой переменной и эту переменную передавать Decrypt. Типа

var
 encrypted: string;
{.......................................}
encrypted := Encrypt(...);
Edit1.Text := Decrypt(...);



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

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

Наверх




Память: 0.5 MB
Время: 0.032 c
2-1158081126
Furyz
2006-09-12 21:12
2006.10.01
Too many reosuce to handle


1-1156256825
Sergio77
2006-08-22 18:27
2006.10.01
из TWebbrowser в Memo


3-1154341981
Бурбузень
2006-07-31 14:33
2006.10.01
Не работает печать Quick Report


8-1142330520
dracula
2006-03-14 13:02
2006.10.01
ISO 9660 информация о сессиях и трэках?


3-1154318587
VadimSpb
2006-07-31 08:03
2006.10.01
Проблема с датой