Студия web-дизайна Хостмэйк
Наши работыКонтактыО компанииОтзывыГлоссарийСтатьи

Защита формы паролем реализованная в Delphi

Статьи Программирование на Delphi

Вот уже вторая заявка посвящена проблеме защиты формы паролем. Раз это вызывает такой интерес, сегодня мы попробуем разобраться с азами такой защиты. Давайте обсудим как мы это будем делать. Логично, что перед запуском формы, которую мы хотим защитить, надо запросить у пользователя пароль (можно конечно и комбинацию имя пользователя - пароль, но мы рассмотрим на примере только пароля) и сравнить введенное значение с каким-то зарезервированным в программе (оно может храниться как в явном виде так и в зашифрованном). Если значения совпадут, то мы откроем необходимую форму, иначе завершим все приложение.


Теперь непосредственно займемся разработкой формы запроса пароля. Хотя разрабатывать нам ничего и не надо: самый простой вариант такой формы Delphi поставляет. Вам надо выбрать пункт меню File -> New, в открывшемся диалоговом окне выберите закладку
Dialogs, щелкните на значке Password Dialog и нажмите Ok. На экране появится готовая форма запроса пароля с именем
PasswordDlg.


На этой форме будут две кнопки Ok и Cancel, текстовое поле ввода пароля с именем
Password, метка Label1 с надписью Enter Password. Заменим свойство
Caption метки Label1 на более приятное русскому глазу 'Введите пароль'. Также поменяем свойство
Caption и для самой формы на 'Запрос пароля', например.


Обратите внимание на свойство PasswordChar поля ввода Edit равно * (звездочке) - это означает, что при вводе все символы будут заменены на звездочки.


Нам необходимо добиться, чтобы форма запроса пароля появлялась на экран раньше основной формы. Это делается так. В обработчике события OnShow главной формы нужно написать такой код:


PasswordDlg.showmodal;


Этот код запустит нашу форму запроса пароля (PasswordDlg) перед основной. И сделает недоступной основную форму, до закрытия формы запроса пароля. Теперь запустите программу, компилятор спросит Вас хотите ли Вы добавить в Uses, модуль второй формы, конечно же надо ответить, что хотите!


Далее поступим следующим образом. Пароль будет хранится в виде константы в нашем приложении. При вводе правильного пароля будет открываться главная форма, а при вводе неправильного пароля, нажатии кнопки Cancel и других попытках закрыть форму запроса будем завершать наше приложение.


Для этого напишем обработчик для события OnFormCloseQuery для формы запроса. Здесь мы будем сравнивать содержимое строки ввода пароля с нашей константой, которую объявим в этом же обработчике. Таким образом получается такой код:


procedure TPasswordDlg.FormCloseQuery(Sender: TObject;

var CanClose: Boolean);

const pass='велкам'; //наш праоль

begin

if Password.Text = pass then CanClose:=true

else Application.Terminate;

end;


Вот мы и реализовали самый простой способ защиты формы. Если хотите сравнивать пароль без учета регистра, то нужно обе строки преобразовать, например, в нижний регистр. Для этого надо поменять всего одну строку:


if Password.Text = pass then CanClose:=true


надо заменить на:


if lowerCase(Password.Text) = lowerCase(pass) then CanClose:=true


Теперь попробуем защитить форму паролем, который будет храниться в зашифрованном виде. Зашифруем пароль самым простым способом -
Xor. Для этого напишем свою функцию:


function TPasswordDlg.xortext(text:string):string;

var key, longkey : string;

i : integer;

toto: char;

begin

key:='da'; //ключ

for i := 0 to (length(text) div length(key)) do

longkey := longkey + key;

for i := 1 to length(text) do begin

toto := chr((ord(text[i]) XOR ord(longkey[i])));

result := result + toto;

end;

end;


Через свое имя функция будет возвращать зашифрованную строку переданную в параметре Text. Не забудьте объявить эту функцию в разделе
Public:


public

{ Public declarations }

function xortext(text:string):string;


Вот, например, что получится, если зашифровать этой процедурой наш "велкам":


†„Џ‹„Ќ


Теперь поменяем обработчик события onFormCloseQuery, описанный в первом пример, на такой:


procedure TPasswordDlg.FormCloseQuery(Sender: TObject;

var CanClose: Boolean);

var pass:string;

begin

pass:=xortext('велкам');


if xortext(Password.Text) = pass then CanClose:=true

else Application.Terminate;

end;


Как Вы видите поменялось совсем не много, теперь пароль в зашифрованном виде можно хранить например в каком-нибудь файле. Так что защищайте Ваши формы :)


Источник: http://delphid.dax.ru

16.02.2006

Телефон

+7 8636 237-836

Поиск

VSESMI.ru — новости в СМИ.
Один из больших по объему информации проектов, работающих под управлением HostCMS.

Tur-Hotel.ru — отзывы об отелях
На сайте представлено описание отелей, рейтинг отелей с отзывами туристов.