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


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


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


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

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

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

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

 

Интересное

Компонент Консоли...
Управление открытыми файлами, общими ресурсами и сеансами подключения пользователей отнимает немало времени. Компонент Консоли управления компьютером (Computer Management Console) «Общие папки»...
Подробнее...
Linux для начинающих:...
Современный компьютер предоставляет пользователю много возможностей, без доброй половины которых он мог бы запросто обойтись. В сети по сей день идут дебаты о том, нужны ли ему 3D-графика и...
Подробнее...
Сквозная навигация
Сквозная навигация — это система связей (гиперссылок), облегчающих движение пользователя по сайту. Речь идёт о максимально возможном переплетении данных. Кроме того, наличие такой связи...
Подробнее...
Однофазные стабилизаторы
Однофазные стабилизаторы помогут спасти электроприборы и бытовую технику. Ежегодно, возрастает количество бытовых приборов и офисной техники используемой потребителями. Это делает востребованным...
Подробнее...
Red Hat и USB-устройства
Цель этой статьи — заставить работать мою USB мышь, USB камеру и USB жесткий диск с Linux«ом.Мой Компьютер с Emperor Linux и USBЯ начал использовать Red Hat 7.3. Хотя уже прошло много времени, и...
Подробнее...
Немного о файрволах:...
Вот стоит файрвол, неприступный как скала. Наивный юзер свято верит, что никакой червь, троян или хакер через этот файрвол не перелезет. Фиг там! Файры блокируют лишь единичные вторжения, и шанс...
Подробнее...
Увеличиваем быстродействие...
Однако, по умолчанию, вне зависимости от установленного объема памяти, Windows XP нерационально использует дополнительный объем памяти, что значительно ограничивает производительность системы в...
Подробнее...
Коммутаторы уровня SOHO
Интересно пронаблюдать историю массового развития локальных сетей. Помнится, еще десять лет назад не составляло особого труда построить сеть буквально в чистом поле, без какого бы то ни было...
Подробнее...
Угон и защита icq уинов
Если хочется 8-ми значный uin... Хотя нет. Пожалуй 7-ми значный... Или 6-ти ;-) Вообщем если не важен номер, а важно только количество знаков в номере то это самый реальный способ.Внизу есть...
Подробнее...
Увеличение...
Настройка сетевой подсистемы FreeBSDЭта статья описывает несколько простых шагов, которые можно выполнить,для получения прироста производительности сетевой подсистемы, а такжеправильно выбрать...
Подробнее...