Отправляет email-рассылки с помощью сервиса Sendsay

Советы по Delphi

  Все выпуски  

Советы по Delphi


Служба Рассылок Subscribe.Ru

Здравствуйте, уважаемые подписчики! Главная тема сегодняшнего выпуска - шифрование текста. Здесь будет рассмотрен очень простой метод. Он не может реально защитить данные, так как пароль легко подбирается при помощи специальной программы. Но большинство пользователей сделать это не смогут или не захотят. Поэтому часто этого способа вполне достаточно.

Шифрование текста
Метод основан на сложении текста и пароля: "мой текст" + "пароль" = ('м'+'п')('о'+'а')... То есть каждый символ получают путем сложения соответствующих символов текста и пароля. Под "сложением символов" я подразумеваю сложение номеров этих символов. Обычно пароль длиннее текста, поэтому его размножают: "парольпар".

Чтобы расшифровать текст, нужно проделать обратную операцию, то есть из текста вычесть пароль.

При нажатии на Button1 эта программа шифрует текст из Memo1 при помощи пароля из Edit1. Результат сохраняется в строку s. Для наглядности зашифрованный текст также помещается в Memo1. При нажатии на Button2 текст из s расшифровывается. Если Вы нажмете Button1 два раза подряд, получится зашифрованный зашифрованный текст. Вернуть начальный текст можно будет двумя нажатиями на Button2. Но, поскольку в результате шифрования в строке могут появится символы с нулевым номером, а в PChar это означает конец строки, часть текста может исчезнуть. У строки Delphi такого недостатка нет, поэтому одинарное шифрование работает всегда верно.

var
  s: string;

procedure Code(var text: string; password: string;
  decode: boolean);
var
  i, PasswordLength: integer;
  sign: shortint;
begin
  PasswordLength := length(password);
  if PasswordLength = 0 then Exit;
  if decode
    then sign := -1
    else sign := 1;
  for i := 1 to Length(text) do
    text[i] := chr(ord(text[i]) + sign *
      ord(password[i mod PasswordLength + 1]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  s := Memo1.Text;
  code(s, Edit1.Text, false);
  Memo1.Text := s;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  code(s, Edit1.Text, true);
  Memo1.Text := s;
end;


Полезные мелочи
При обращении к элементам различных списков приходится писать что-то вроде: a.Strings[2] или b.Items. Эту запись можно сократить, убрав слово Strings или Items. Пример:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.Add('abc');
  sl.Add('def');
  sl.Add('ghi');
  Form1.Caption := sl[0] + sl[1] + sl[2]; { Вместо sl.Strings[0] +
                                            sl.Strings[1] + sl.Strings[2] }
end;
Это работает в таких классах, как ActionList, Bits, ComponentList, ClassList, HeaderSections, List, ListItems, MenuItem, ObjectList, StatusPanels, StringList, Strings, TreeNode и некоторых других.


Все советы и замечания, пожалуйста, присылайте на delphi4all@narod.ru

Всего доброго,
Даниил Карапетян.






http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное