Авторизация с использованием съемного носителя

В наше время широко распространено использование ключей безопасности в качестве входа в систему или программу. Наиболее известными программным продуктом является 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();	//получение списка съемных носителей 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;

Полный исходный код программы можно скачать ниже.