Ошибка: Failed to parse the Currency Converter XML document.
$997.63


Ошибка: Failed to parse the Currency Converter XML document.
$20 228.02


Ошибка: Failed to parse the Currency Converter XML document.
$1 360.90


Защита формы паролем

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

Теперь непосредственно займемся разработкой формы запроса пароля. Хотя разрабатывать нам ничего и не надо: самый простой вариант такой формы 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;

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

 

Интересное

Ставим Windows Server 2003
К вопросу о “правильных” и “неправильных” дискахДля начала расскажу о тех дисках, которые я считаю “неправильными”. Во-первых, это все “Beta X” которые вам удастся найти. Причина, по которой я их...
Подробнее...
Время выполнения SQL запросов
Итак, нам нужно засечь время, потраченное на выполнение SQL запросов ? Это не очень легко, но и не сложно. Начнем с определения задачи. Необходимо выдать полное время, затраченное на генерацию...
Подробнее...
Собираем Apache + PHP +...
Итак попробуем все это собрать. Для начала нам понадобиться apache, php, sablot, xpat, iconv. Последние три представляют собой программы для обработки XML/XSLT файлов.
Подробнее...
Как узнать информацию о...
Вы, возможно, видели нестандартные дельфийские компоненты, позволяющие сделать лог системы. Сейчас мы самостоятельно реализуем что-нибудь не хуже.Прежде всего, где хранится эта самая системная...
Подробнее...
Настройка DHCP сервера
Настройка DHCP сервера. Автоматическое распределение адресного ространства: Грамотное распределение имеющегося адресного пространства внутри локальной сети с количеством компьютеров более двадцати...
Подробнее...
Создание заставок для...
Наверно, каждый программист на Дельфи хоть раз хотел создать к какой-нибудь своей программе заставку. Тому кто умеет работать более чем с одной формой в приложении, будет очень легко это понять....
Подробнее...
Безопасность. Какой вопрос...
Думаю, у каждого при чтении специализированной литературы возникали вопросы по поводу тех или иных терминов. Но, как правило, поблизости обычно нет того, кто может объяснить их значение. Проблемы...
Подробнее...
Уменьшаем траффик вдвое
Заставила меня написать эту статью интересная возможность. Это возможность пользоваться сетью, используя любую технологию, в которой оплата взимается по траффику(например, ADSL или GPRS), снижая...
Подробнее...
Про Хакеров
«Уважаемый г-н Иванов! Коpпоpация Microsoft пpоводит беспpецедентную акцию и пpедлагает Вам участие в пpогpамме »Лицензия-Плюс«. Суть пpогpаммы заключается в том, что мы пеpеводим на Ваш...
Подробнее...
Администрирование дисков в...
Опытные пользователи Windows NT успели привыкнуть к утилите Disk Administrator, с помощью которой можно было создавать, удалять и менять параметры томов на физических дисках. В Windows 2000 ее...
Подробнее...