Sekundärentwicklung eines Fingerabdrucksensors in Delphi
1. Einführung in den Fingerabdrucksensor
Fingerabdrücke gelten als „erste physische Beweise“. Die wissenschaftliche Schlussfolgerung zu Fingerabdrücken lautet: Geht man davon aus, dass es 5 Milliarden Menschen auf der Erde gibt, wird es 300 Jahre dauern, bis zwei identische Fingerabdrücke sichtbar sind. Es ist ersichtlich, dass die Einzigartigkeit von Fingerabdrücken einen unwiderlegbaren Status hat.
Fingerabdrucksensoren haben erstmals digitale Sicherheitssysteme, wie wir sie kennen, verändert. Bisher basierte alles auf Passwörtern. Sie müssen Ihren eigenen Benutzernamen verwenden und Ihr System konfigurieren. Sie müssen Ihre Tastatur abdecken, damit andere Ihr Passwort nicht sehen können. Wenn Sie jedoch nicht aufpassen, kann jeder leicht Ihr Passwort stehlen.
Einschlägige Experten sagen voraus: „Durch das Fingerabdruckerkennungssystem haben wir die Sicherheitsbedürfnisse von Heim- und Geschäftscomputerbenutzern erweitert. In naher Zukunft, egal ob im lokalen Netzwerk oder im Internet, ob bei der Registrierung oder beim Zugriff auf Sicherheitsdaten, Es wird unmöglich sein, keine weiteren Passwörter mehr zu benötigen, es genügt eine Berührung Ihres Fingers.“
2. Einführung in die Sekundärentwicklung des Fingerabdruckscanners
Derzeit gibt es viele Hersteller von Fingerabdruckscannern mit großem Einfluss. DigitalPersona ist der weltweit größte Hersteller von Computertastaturen in einem Vertrag mit Chicony Electronics zur Integration des U.are.U-Fingerabdruck-Sicherheitssystems von DigitalPersona in Tastaturen, die unter anderem für HP, Compaq und IBM hergestellt werden.
Die in diesem Artikel vorgestellte Sekundärentwicklung des Fingerabdrucksensors basiert auf U.are.U 2000 von DigitalPersona. U.are.U ist die Abkürzung für „You are you“ (Sie sind Sie). Das Gerät kann Fingerabdruckbilder automatisch lesen und die digitalen Fingerabdruckbilder über die USB-Schnittstelle an den Computer übertragen. Es ist ein ideales Zubehör für Laptops, Desktops oder andere PC-Geräte, die eine Authentifizierung erfordern.
U.are.U 2000 ist ein kostengünstiger, kompakter Fingerabdruckleser. Es integriert ein präzises optisches System, eine LED-Lichtquelle und eine CMOS-Kamera, um während der Bildaufnahme eine Spannungssteuerung und automatische Korrektur durchzuführen, und nutzt eine Plug-and-Play-USB-Schnittstelle zum Scannen und Sammeln von Fingerabdrücken um zu DigitalPersona U.are.U zu führen. Fingerabdruck-Erkennungsalgorithmen, Anwendungen und Schnittstellen zum DigitalPersona Universal Authentication Manager (UAM) – diese Fingerabdruck-bezogenen Anwendungen umfassen Windows Anmeldung, Bildschirmsperre, Passwortersetzung und verschlüsseltes Laufwerk.
Beim Kauf von Hardwareprodukten für Fingerabdrucksensoren legen Händler in der Regel Hardwaretreiber, Produkthandbücher, sekundäre Entwicklungskits und Beispiele für Entwicklungsprogramme bei. Über das Software Development Kit (SDK) kann der Anwendung die Funktion zur Fingerabdruckerkennung hinzugefügt werden.
3. Schlüsseltechnologien im sekundären Entwicklungsprozess von Fingerabdruckscannern
1.dll-Aufruf
Lassen Sie uns zunächst die Methode zum Aufrufen der DLL im Entwicklungskit für Fingerabdrucksensoren in delpi vorstellen. Platzieren Sie die uruShell.dll im Entwicklungspaket im Programmverzeichnis oder Systemverzeichnis. Der Übersichtlichkeit halber sind die DLL-Aufrufanweisungen in einer Programmeinheit Shelluru.pas konzentriert, in die die Funktionen von uruShell.dll exportiert und zugehörige Referenzanweisungen vorgenommen werden. Der spezifische Quellcode lautet wie folgt:
Einheit Shelluru;
Schnittstelle
verwendet Windows, Nachrichten;
const
FT_OK = 0; // Erfolg
FT_ERR_NO_INIT = -1; // Keine Initialisierung
FT_ERR_UNKNOWN_DEVICE = -10; // Unbekanntes Gerät
FT_ERR_DEVICE_CONNECTED = -18; // Das Gerät ist verbunden
FT_ERR_NO_DEVICE_CONNECTED = -19; // Es kann kein Gerät verbunden werden
MAX_REGISTER_COUNT= 8; // Maximale Anzahl von Registern
ERR_REGISTER_FAIL= -110; // Registrierung fehlgeschlagen
ERR_VERIFY_FAIL= -111; // Überprüfung fehlgeschlagen
ERR_REGISTER_COUNT= -112; // Anzahl der Registrierungen
{Das Folgende ist eine benutzerdefinierte Nachricht: MSG_FINGER_CAPTURED Fingerabdruck-Erfassungsnachricht. }MSG_WAITING_FOR_IMAGE Fingerabdruck-Wartenachricht.
MSG_FINGER_CAPTURED= WM_USER + 80;
MSG_WAITING_FOR_IMAGE= WM_USER + 81;
Typ
PRegisterPixels = ^TRegisterPixels;
TRegisterPixels = array[1..MAX_REGISTER_COUNT] of Pointer;
///uru_Init initialisiert den Fingerabdrucksensor. Parameter: numOfDev gibt die Anzahl der an den Computer angeschlossenen Fingerabdrucksensoren zurück.
function uru_Init(var numOfDev, FeatureLen: integer): integer;
///uru_Connect stellt eine Verbindung zu einem bestimmten Fingerabdrucksensor her. Parameter: DeviceNo Nummer des Fingerabdrucksensors.
function uru_Connect(DeviceNo: integer): integer;
///uru_Terminate trennt die Verbindung zum Fingerabdrucksensor. Parameter: DeviceNo Nummer des Fingerabdrucksensors.
procedure uru_Terminate(DeviceNo: integer);
///uru_AllocFeature weist Fingerabdruckdatenadresse zu. Parameter: Von Feature zurückgegebener Adresszeiger.
procedure uru_AllocFeature(var Feature: pointer);
///uru_FreeFeature gibt die zugewiesene Adresse frei. Parameter: Von Feature zurückgegebener Adresszeiger.
procedure uru_FreeFeature(var Feature: pointer);
///uru_GetImageWidth ruft die Breite des Fingerabdruckbilds ab.
Funktion uru_GetImageWidth: integer;
///uru_GetImageHeight ruft die Höhe des Fingerabdruckbildes ab.
Funktion uru_GetImageHeight: integer;
///uru_Register Fingerabdruck-Registrierungsfunktion. Parameter: hwnd-Fensterhandle, wird für die Nachrichtenübertragung verwendet; DeviceNo-Nummer des Fingerabdrucksensors;
///fngCount Fingerabdruck-Registrierungszeiten; Pixel-Fingerabdruck-Bildverbindungszeiger; Verfügt über einen Fingerabdruck-Registrierungsdatenzeiger.
function uru_Register(hwnd: HWND; DeviceNo, fngCount: integer;Pixels: PRegisterPixels; Features: pointer): integer;
///uru_AcquireFeatures Funktion zur Überprüfung des Fingerabdrucks. Parameter: hwnd-Fensterhandle, wird für die Nachrichtenübertragung verwendet; DeviceNo-Nummer des Fingerabdrucksensors.
function uru_AcquireFeatures(hwnd: HWND; DeviceNo: integer; Pixels, Features: pointer): integer;
///uru_verifyFeatures Fingerabdruck-Vergleichsfunktion. Parameter: srcFeatures muss Fingerabdruckdaten vergleichen; dstFeatures muss Fingerabdruckdaten vergleichen.
function uru_verifyFeatures(srcFeatures, dstFeatures: pointer): Boolean;
///dll-Registrierungsfunktion
procedure uru_DllRegister;
///Unterbrechen Sie die spezifische Bildgebungsfunktion des Fingerabdrucksensors. Parameter: DeviceNo Nummer des Fingerabdrucksensors.
Prozedur uru_StopGetImage(DeviceNO:Integer);Stdcall;
Durchführung
const
DLLNAME= 'uruShell.dll';
{Das Folgende ist die Erklärung zum Aufrufen der exportierten Funktion von uruShell.dll}
Funktion uru_Init; externer DLLNAME;
Funktion uru_Connect; externer DLLNAME;
Prozedur uru_Terminate; externer DLLNAME;
procedure uru_AllocFeature; externer DLLNAME;
Prozedur uru_FreeFeature; externer DLLNAME;
Funktion uru_GetImageWidth; externer DLLNAME;
Funktion uru_GetImageHeight; externer DLLNAME;
Funktion uru_Register; externer DLLNAME;
Funktion uru_AcquireFeatures; externer DLLNAME;
Funktion uru_verifyFeatures; externer DLLNAME;
procedure uru_DllRegister; externer DLLNAME;
Prozedur uru_StopGetImage;external DLLNAME;
Ende.
Nach Abschluss der oben genannten Arbeiten können Sie auf die Datei Shelluru.pas in der Hauptprojektdatei verweisen und dann die in der Datei Shelluru.pas definierten Funktionen aufrufen.
2. Speichern Sie die verifizierten Fingerabdruckdaten in einer Datei oder Datenbank
Durch Aufrufen der oben definierten Funktionen können wir ein Fingerabdruck-Identifizierungssystem für die Registrierung, Überprüfung, Speicherung von Fingerabdruckdaten und die erneute Überprüfung (Erkennung) von Fingerabdrücken implementieren. Das Folgende konzentriert sich auf die Programmierimplementierung des Prozesses zur Registrierung und Verifizierung von Fingerabdrücken:
procedure TForm1.BtnRegisterClick(Sender: TObject); file://Register-Fingerabdruck
var
i:Ganzzahl;
beginnen
wenn UserList.Selected = nil dann
beginnen
MessageBox(application.Handle, 'Bitte wählen Sie zuerst einen Benutzer aus!', nil, MB_OK);
Ausfahrt;
Ende;
wenn UserList.Selected.Data <> nil dann
Feature := UserList.Selected.Data file://Feature ist derzeit leer
anders
uru_AllocFeature(Feature);
Wenn Feature = Null, dann file://Wenn die Fingerabdruckfunktion leer ist
beginnen
Status.SimpleText := 'Funktionsspeicher kann nicht zugewiesen werden';
Ausfahrt;
Ende;
für i := 1 bis 4 tun
beginnen
FillChar(Pixels[i]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Bilder[i].Refresh;
Ende;
Status.SimpleText := 'Registrierung starten' + UserList.Selected.Caption + 'Fingerprint...';
wenn uru_Register(Handle, DeviceNo, 4, @Pixels, Feature) = FT_OK dann
beginnen
Status.SimpleText := UserList.Selected.Caption + ': Registrierung erfolgreich!';
wenn UserList.Selected.Data = nil dann
UserList.Selected.Data := Feature;
Ende
anders
beginnen
if UserList.Selected.Data = nil then uru_FreeFeature(Feature);
Status.SimpleText := UserList.Selected.Caption + ': Registrierung fehlgeschlagen!';
Ende;
Ende;
Diese Funktion ruft hauptsächlich die Funktion uru_Register in der DLL auf, um Fingerabdrücke für Benutzer zu registrieren. Beim Registrieren von Fingerabdrücken wird der charakteristische Wert des Fingerabdrucks extrahiert, ein Speicher für den charakteristischen Wert zum Speichern der charakteristischen Wertdaten des Fingerabdrucks zugewiesen und ein Zeiger verwendet, auf den verwiesen wird diesen Speicher, damit er in Zukunft abgerufen werden kann. Nach Abschluss der Registrierung muss umgehend eine Überprüfung durchgeführt werden, um sicherzustellen, dass die Daten korrekt sind. Der Überprüfungsprozess läuft wie folgt ab:
procedure TForm1.BtnVerifyClick(Sender: TObject); file://Verifizierungsfingerabdruck
var
aFeature:pointer;
i: ganze Zahl;
fingerpath: string;
beginnen
fingerpath:='C:/finger'+Edit9.Text+Edit10.Text;//Speicherpfad für Fingerabdruckdaten
wenn UserList.Selected = nil dann
beginnen
MessageBox(Application.Handle, 'Bitte wählen Sie zuerst einen Benutzer aus!', nil, MB_OK);
Ausfahrt;
Ende;
wenn UserList.Selected.Data = nil dann
beginnen
MessageBox(Application.Handle, PChar(Format('Benutzer %s hat noch keinen Fingerabdruck registriert, bitte registrieren Sie sich zuerst!', [UserList.Selected.Caption])), nil, MB_OK);
Ausfahrt;
Ende;
FillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Bilder[5].Aktualisieren;
Status.SimpleText := 'Überprüfung starten' + UserList.Selected.Caption + 'Fingerprint...';
Feature := UserList.Selected.Data; file://Fingerprint-Daten müssen verglichen werden
move(Feature^,byt,len); file://Verschieben Sie ein Segment im Speicher mit einer Länge von len und verschieben Sie die Daten beginnend bei Feature in das Byte-Array
uru_AllocFeature(aFeature);// Fingerabdruckdatenadresse zuweisen
if (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature) = FT_OK) und uru_verifyFeatures(@byt, aFeature) then
file://uru_AcquireFeaturesFingerprint-Überprüfung
file://uru_verifyFeaturesFingerprint-Vergleich
beginnen
Status.SimpleText := UserList.Selected.Caption + ': Überprüfung erfolgreich!';
AssignFile(F,fingerpath);//Datei zuweisen
ReWrite(F);//Schreibe die Datei neu
for i:=0 to len do
Write(F,byt[i]);//Fingerabdrucksensordaten in Datei schreiben
CloseFile(F);//Schließe die Datei
Ende
anders
Status.SimpleText := UserList.Selected.Caption + ': Überprüfung fehlgeschlagen!';
uru_FreeFeature(aFeature); file://Release-Speicher
Ende;
Der Schlüssel zum oben genannten Prozess besteht darin, die Fingerabdruckdaten im Speicher umgehend in einer Datendatei zu speichern, nachdem die Fingerabdrucküberprüfung erfolgreich war. Der Name der Datendatei besteht vorzugsweise aus dem Benutzernamen plus einer Nummer, damit die entsprechenden Benutzer-Fingerabdruckdaten problemlos erfasst werden können bei der anschließenden Überprüfung gefunden. Denken Sie abschließend daran, den vorübergehend zugewiesenen Speicher freizugeben. Speichern Sie die Fingerabdruckdaten in einer Datei. Anschließend können Sie die Datei öffnen, um die Datendatei abzurufen und einen Abgleichvorgang mit dem aktuellen Benutzer durchzuführen, um die korrekte Identität des Benutzers zu überprüfen.
procedure TForm1.BitBtn2Click(Sender: TObject); file://Alten Benutzerfingerabdruck überprüfen
var
aFeature1: Zeiger;
i: ganze Zahl;
beginnen
wenn OpenDialog1.Execute dann
beginnen
AssignFile(G,OpenDialog1.FileName);//Datei angeben
Reset(G);//Datei zurücksetzen
for i:=0 to len do
Read(G, byt2[i]);//Verschieben Sie die Fingerabdrucksensordaten in der Datei in das Byte2-Array
CloseFile(G);//Schließe die Datei
Ende;
FillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Bilder[5].Aktualisieren;
Status.SimpleText := 'Überprüfung starten' + UserList.Selected.Caption + 'Fingerprint...';
uru_AllocFeature(aFeature1);// Fingerabdruckdatenadresse zuweisen
if (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature1) = FT_OK) und uru_verifyFeatures(@byt2, aFeature1) then
Status.SimpleText := UserList.Selected.Caption + ': Überprüfung erfolgreich!'
anders
Status.SimpleText := UserList.Selected.Caption + ': Überprüfung fehlgeschlagen!';
uru_FreeFeature(aFeature1); file://Release-Speicher
Ende;
Tatsächlich können Fingerabdruckdaten auch in einer Datenbank gespeichert werden, sodass ein mehrschichtiges Struktursystem implementiert werden kann. Der Zugriff auf Fingerabdruckdaten erfolgt bei Bedarf zentral in der Datenbank liest sie vom Server, wenn alte Benutzer Daten verifizieren müssen, um die Sicherheit zu gewährleisten.
4. Zusammenfassung
In diesem Artikel wird die Verwendung von U.are.U 2000 vorgestellt Das Entwicklungskit des Fingerabdrucksensors wurde für die Sekundärentwicklung entwickelt, um einen Prozess zur Registrierung, Überprüfung, Datenspeicherung und erneuten Überprüfung alter Fingerabdrücke zu implementieren. Dieser Prozess kann in einigen Systemen verwendet werden, die persönliche Identitäten anhand von Fingerabdrücken identifizieren müssen Auf dieser Grundlage wurde vom Autor ein Prototyp eines Systems zur Verwaltung befristeter Aufenthaltsgenehmigungen für öffentliche Sicherheitsbehörden oder Wohngemeinschaften entwickelt, das hauptsächlich das implementiert Die Funktion zur Verwaltung vorübergehender Aufenthaltsgenehmigungen für den Haushalt. In diesem Artikel werden nur die Methode zum Aufrufen der DLL im Entwicklungspaket für Fingerabdrucksensoren und die wichtigsten Prozesse zur Registrierung und Überprüfung in der Sekundärentwicklung vorgestellt des Fingerabdruckgeräts, weil Es ist relativ einfach, sodass Leser es nicht selbst auf der Grundlage der von der DLL bereitgestellten Funktionen entwickeln können. Gerne können Sie mir zur Diskussion schreiben. Meine E-Mail lautet [email protected]