Ошибка: Failed to parse the Currency Converter XML document.
$2 882.04
|
Ошибка: Failed to parse the Currency Converter XML document.
$23 935.38
|
Ошибка: Failed to parse the Currency Converter XML document.
$1 658.32
|
Защита формы паролем
Теперь непосредственно займемся разработкой формы запроса пароля. Хотя разрабатывать нам ничего и не надо: самый простой вариант такой формы 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;
Как Вы видите поменялось совсем не много, теперь пароль в зашифрованном виде можно хранить например в каком-нибудь файле.