Блог программиста и системного администратора Авторизация с использованием съемного носителя
В наше время широко распространено использование ключей безопасности в качестве входа в систему или программу. Наиболее известными
программным продуктом является Education программа для хранения данных об учебном заведении. Для ее использования необходима специальная пластиковая карта, на которой хранятся данные о директоре и зашифрованный ключ. Используя данную карту и зная пароль, можно авторизоваться в программе и приступить к работе с ней.
Для реализации подобной функции в Delphi в качестве ключа будет использоваться серийный номер переносного носителя (к примеру флешки).
Для реализации подобной функции в Delphi в качестве ключа будет использоваться серийный номер переносного носителя (к примеру флешки).
Алгоритм программы
1. В программу заранее вписывается серийный номер съемного носителя, который будет, служит в качестве ключа авторизации;
2. Отслеживается подключение нового устройства к компьютеру, если это съемный носитель то имя тома добавляется в список;
3. Если подключено несколько флешек, то из списка необходимо выбрать ту флешку, которая будет использована в качестве ключа авторизации.
В качестве примера реализовано программа, которая позволяет вводить текст, если вставлена флешка имеющая определенный серийный номер.
procedure ScanRemovableDrive();
var
i:Integer;
FlashDriveList : TStringList; // объект, который будет хранить имена томов съемный носителей
stText:String;
begin
Form1.cbb1.Clear; //очистка объекта ComboBox
FlashDriveList := TStringList.Create; //Создание пустого списка
FlashDriveList := issetRemovableDrive(); //получение списков cъемных носителей issetRemovableDrive см. Определение серийного номера съемного носителя
if FlashDriveList.Count > 0 then //если список не пустой
begin
for i:=0 to FlashDriveList.Count-1 do //выводим название томов в объект ComboBox
begin
Form1.cbb1.Items.Add(FlashDriveList.Strings[i]);
end;
Form1.cbb1.ItemIndex:=0; //переключаемся на первый элемент объекта ComboBox
{получаем серийный номер выбранного из ComboBox устройства и сравниваем его с константой
snRemovableDrive, в которой автоматически задан серийный номер флешки для авторизации в программе.
Если данные номера совпадают, то разрешается ввод текста в поле memo, а иначе нет.}
if snRemovableDrive=GetHardDiskSerial(Form1.cbb1.Text[1]) then Form1.mmo1.ReadOnly:=FALSE
else Form1.mmo1.ReadOnly:=TRUE;
Form1.lbl2.Caption:=GetHardDiskSerial(Form1.cbb1.Text[1]); //вывод серийного номера флешки
Form1.stat1.Panels[0].Text:='Флешка подключена'; //вывод статуса подключения флешки
end
else
begin
Form1.stat1.Panels[0].Text:='Флешка не подключена'; //вывод статуса подключения
Form1.lbl2.Caption:='none';
end;
FlashDriveList.Free; //освобождаем память FlashDriveList
end;
Для слежения подключения съемного носителя используется процедура WMDeviceChange (var Msg: TMessage);
uses
rxStrUtils;
const
snRemovableDrive='525D533C'; //с/н флешки при котором разрешается доступ к программе
type
private
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
procedure TForm1.WMDeviceChange(var Msg: TMessage);
begin
ScanRemovableDrive()
end;