Développement secondaire d'un capteur d'empreintes digitales dans Delphi
1. Introduction au capteur d'empreintes digitales
Les empreintes digitales ont la réputation de « la première des preuves matérielles ». La conclusion de la communauté scientifique sur les empreintes digitales est la suivante : en supposant qu’il y ait 5 milliards de personnes sur terre, il faudra 300 ans pour que deux empreintes digitales identiques apparaissent. On voit que le caractère unique des empreintes digitales a un statut irréfutable.
Les capteurs d’empreintes digitales ont transformé pour la première fois les systèmes de sécurité numérique tels que nous les connaissons. Auparavant, tout reposait sur des mots de passe. Vous devez utiliser votre propre nom d'utilisateur et configurer votre système. Vous devez couvrir votre clavier afin que les autres ne puissent pas voir votre mot de passe. Cependant, si vous ne faites pas attention, il est facile pour quiconque de voler votre mot de passe.
Les experts concernés prédisent : « Grâce au système de reconnaissance d'empreintes digitales, nous avons élargi les besoins de sécurité des utilisateurs d'ordinateurs domestiques et professionnels. Dans un avenir proche, que ce soit sur le réseau local ou sur Internet, qu'il s'agisse d'enregistrer ou d'accéder à des données de sécurité, il sera impossible de ne plus avoir besoin de mots de passe, il suffit d'appuyer sur votre doigt."
2. Introduction au développement secondaire du scanner d'empreintes digitales
Il existe actuellement de nombreux fabricants de scanners d'empreintes digitales dans le monde, avec une grande influence. La série U.are.U de DigitalPersona est la plus utilisée. DigitalPersona est le plus grand fabricant de claviers d'ordinateur au monde. Cette société utilise déjà des systèmes de sécurité de bio-ingénierie. dans le cadre d'un accord avec Chicony Electronics pour intégrer le système de sécurité de détection d'empreintes digitales U.are.U de DigitalPersona dans des claviers conçus pour HP, Compaq et IBM, entre autres.
Le développement secondaire du capteur d'empreintes digitales présenté dans cet article est basé sur U.are.U 2000 de DigitalPersona. U.are.U est l'abréviation de vous êtes vous (vous êtes vous). L'appareil peut lire automatiquement les images d'empreintes digitales et transmettre les images d'empreintes digitales numériques à l'ordinateur via l'interface USB. C'est un accessoire idéal pour les ordinateurs portables, les ordinateurs de bureau ou autres appareils PC nécessitant une authentification.
U.are.U 2000 est un lecteur d'empreintes digitales compact et peu coûteux. Il intègre un système optique de précision, une source de lumière LED et une caméra CMOS pour travailler ensemble pour effectuer un contrôle de tension et une correction automatique pendant la capture d'image, et utilise une interface USB plug-and-play pour la numérisation et la collecte d'empreintes digitales U.are.U 2000. pour conduire aux algorithmes, applications et interfaces de reconnaissance d'empreintes digitales DigitalPersona U.are.U vers DigitalPersona Universal Authentication Manager (UAM) - ces applications liées aux empreintes digitales incluent Windows Connexion, verrouillage de l'écran, remplacement du mot de passe et lecteur de disque crypté.
Lors de l'achat de produits matériels pour capteurs d'empreintes digitales, les commerçants incluent généralement des pilotes matériels, des manuels de produits, des kits de développement secondaires et des exemples de programmes de développement. Grâce au kit de développement logiciel (SDK), la fonction de reconnaissance d'empreintes digitales peut être ajoutée à l'application.
3. Technologies clés dans le processus de développement secondaire des scanners d'empreintes digitales
Appel 1.dll
Tout d’abord, introduisons la méthode d’appel de la DLL dans le kit de développement du capteur d’empreintes digitales dans Delpi. Placez le uruShell.dll dans le package de développement dans le répertoire du programme ou le répertoire système. Par souci de clarté, les instructions d'appel de DLL sont concentrées dans une unité de programme Shelluru.pas, dans laquelle les fonctions de uruShell.dll sont exportées et les instructions de référence associées sont créées. Le code source spécifique est le suivant :
unité Shelluru;
interface
utilise Windows, Messages ;
const
FT_OK = 0 ; // Succès
FT_ERR_NO_INIT = -1; // Pas d'initialisation
FT_ERR_UNKNOWN_DEVICE = -10; // Périphérique inconnu
FT_ERR_DEVICE_CONNECTED = -18; // L'appareil est connecté
FT_ERR_NO_DEVICE_CONNECTED = -19; // Aucun appareil ne peut être connecté
MAX_REGISTER_COUNT= 8; // Nombre maximum de registres
ERR_REGISTER_FAIL= -110; // L'enregistrement a échoué
ERR_VERIFY_FAIL= -111; // La vérification a échoué
ERR_REGISTER_COUNT= -112; // Nombre d'inscriptions
{Ce qui suit est un message personnalisé, message d'acquisition d'empreintes digitales MSG_FINGER_CAPTURED ; }Message d'attente d'empreintes digitales MSG_WAITING_FOR_IMAGE ;
MSG_FINGER_CAPTURED=WM_USER + 80 ;
MSG_WAITING_FOR_IMAGE=WM_USER + 81 ;
taper
PRegisterPixels = ^TRegisterPixels;
TRegisterPixels = tableau[1..MAX_REGISTER_COUNT] de pointeur ;
///uru_Init initialise le capteur d'empreintes digitales. Paramètres : numOfDev renvoie le nombre de capteurs d'empreintes digitales connectés à l'ordinateur ; FeatureLen renvoie la longueur des données d'empreintes digitales.
function uru_Init(var numOfDev, FeatureLen : entier) : entier stdcall ;
///uru_Connect se connecte à un capteur d'empreintes digitales spécifique. Paramètre : appareil Aucun numéro de capteur d'empreintes digitales.
fonction uru_Connect (DeviceNo : entier) : entier ; stdcall ;
///uru_Terminate se déconnecte du capteur d'empreintes digitales. Paramètre : appareil Aucun numéro de capteur d'empreintes digitales.
procédure uru_Terminate (DeviceNo : entier) ; stdcall ;
///uru_AllocFeature attribue une adresse de données d'empreinte digitale. Paramètres : pointeur d'adresse renvoyé par Feature.
procédure uru_AllocFeature(var Feature: pointeur);
///uru_FreeFeature libère l'adresse allouée. Paramètres : pointeur d'adresse renvoyé par Feature.
procédure uru_FreeFeature(var Feature: pointeur);
///uru_GetImageWidth obtient la largeur de l'image de l'empreinte digitale.
fonction uru_GetImageWidth : entier ; stdcall ;
///uru_GetImageHeight obtient la hauteur de l'image de l'empreinte digitale.
fonction uru_GetImageHeight : entier ; stdcall ;
///uru_Register fonction d'enregistrement d'empreintes digitales. Paramètres : poignée de fenêtre hwnd, utilisée pour la transmission des messages ; numéro de capteur d'empreintes digitales ;
///fngCount Temps d'enregistrement des empreintes digitales ; Pointeur de connexion d'image d'empreinte digitale en pixels ; Comprend un pointeur de données d'enregistrement d'empreintes digitales.
fonction uru_Register (hwnd : HWND ; DeviceNo, fngCount : entier ; Pixels : PRegisterPixels ; Caractéristiques : pointeur) : entier ;
///uru_AcquireFeatures fonction de vérification d'empreintes digitales. Paramètres : poignée de fenêtre hwnd, utilisée pour la transmission des messages ; numéro de capteur d'empreintes digitales DeviceNo.
function uru_AcquireFeatures(hwnd : HWND ; DeviceNo : entier ; Pixels, Caractéristiques : pointeur) : entier ; stdcall ;
///uru_verifyFeatures fonction de comparaison d'empreintes digitales. Paramètres : srcFeatures doit comparer les données d'empreintes digitales ; dstFeatures doit comparer les données d'empreintes digitales.
function uru_verifyFeatures(srcFeatures, dstFeatures: pointer) : Boolean stdcall ;
///fonction d'enregistrement dll
procédure uru_DllRegister ;
///Interrompre la fonction d'imagerie spécifique du capteur d'empreintes digitales. Paramètre : appareil Aucun numéro de capteur d'empreintes digitales.
Procédure uru_StopGetImage(DeviceNO:Integer);Stdcall;
mise en œuvre
const
DLLNAME= 'uruShell.dll';
{Ce qui suit est la déclaration d'appel de la fonction exportée de uruShell.dll}
fonction uru_Init ; DLLNAME externe ;
fonction uru_Connect ; DLLNAME externe ;
procédure uru_Terminate ; DLLNAME externe ;
procédure uru_AllocFeature ; DLLNAME externe ;
procédure uru_FreeFeature ; DLLNAME externe ;
fonction uru_GetImageWidth ; DLLNAME externe ;
fonction uru_GetImageHeight ; DLLNAME externe ;
fonction uru_Register ; DLLNAME externe ;
fonction uru_AcquireFeatures ; DLLNAME externe ;
fonction uru_verifyFeatures ; DLLNAME externe ;
procédure uru_DllRegister ; DLLNAME externe ;
Procédure uru_StopGetImage;external DLLNAME;
fin.
Après avoir terminé le travail ci-dessus, vous pouvez référencer le fichier Shelluru.pas dans le fichier principal du projet, puis appeler les fonctions définies dans le fichier Shelluru.pas.
2. Enregistrez les données d'empreintes digitales vérifiées dans un fichier ou une base de données
En appelant les fonctions définies ci-dessus, nous pouvons implémenter un système d'identification par empreintes digitales pour l'enregistrement, la vérification, le stockage des données d'empreintes digitales et la revérification (reconnaissance) des empreintes digitales. Ce qui suit se concentre sur la mise en œuvre programmatique du processus d’enregistrement et de vérification des empreintes digitales :
procédure TForm1.BtnRegisterClick(Expéditeur : TObject); fichier://Enregistrer l'empreinte digitale
var
je:entier;
commencer
si UserList.Selected = nul alors
commencer
MessageBox(application.Handle, 'Veuillez d'abord sélectionner un utilisateur !', nil, MB_OK);
Sortie;
fin;
si UserList.Selected.Data <> nul alors
Feature := UserList.Selected.Data file://La fonctionnalité est vide pour le moment
autre
uru_AllocFeature(Fonctionnalité);
si Feature = nul alors file://Si la fonction d'empreinte digitale est vide
commencer
Status.SimpleText := 'Impossible d'allouer la mémoire des fonctionnalités';
Sortie;
fin;
pour je := 1 à 4 faire
commencer
FillChar(Pixels[i]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Images[i].Actualiser ;
fin;
Status.SimpleText := 'Démarrer l'inscription' + UserList.Selected.Caption + 'Fingerprint...';
si uru_Register (Handle, DeviceNo, 4, @Pixels, Feature) = FT_OK alors
commencer
Status.SimpleText := UserList.Selected.Caption + ': Inscription réussie !';
si UserList.Selected.Data = nul alors
UserList.Selected.Data := Fonctionnalité ;
fin
autre
commencer
si UserList.Selected.Data = nul alors uru_FreeFeature(Feature);
Status.SimpleText := UserList.Selected.Caption + ': L'enregistrement a échoué !';
fin;
fin;
Cette fonction appelle principalement la fonction uru_Register dans la DLL pour enregistrer les empreintes digitales des utilisateurs. L'enregistrement des empreintes digitales consiste à extraire la valeur caractéristique de l'empreinte digitale, à allouer une mémoire pour la valeur caractéristique pour stocker les données de valeur caractéristique de l'empreinte digitale et à utiliser un pointeur vers lequel pointer. cette mémoire, afin qu'elle puisse être récupérée dans le futur. Une fois l'enregistrement terminé, une vérification doit être effectuée immédiatement pour garantir que les données sont correctes. Le processus de vérification est le suivant :
procédure TForm1.BtnVerifyClick(Expéditeur : TObject); fichier://empreinte de vérification
var
aFonction : pointeur ;
je : entier ;
parcours du doigt : chaîne ;
commencer
fingerpath:='C:/finger'+Edit9.Text+Edit10.Text;//Chemin de stockage des données d'empreintes digitales
si UserList.Selected = nul alors
commencer
MessageBox(Application.Handle, 'Veuillez d'abord sélectionner un utilisateur !', nil, MB_OK);
Sortie;
fin;
si UserList.Selected.Data = nul alors
commencer
MessageBox(Application.Handle, PChar(Format('L'utilisateur %s n'a pas encore enregistré son empreinte digitale, veuillez d'abord vous inscrire !', [UserList.Selected.Caption])), nil, MB_OK);
Sortie;
fin;
FillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Images[5].Actualiser ;
Status.SimpleText := 'Démarrer la vérification' + UserList.Selected.Caption + 'Fingerprint...';
Fonctionnalité := UserList.Selected.Data ; file://Les données d'empreintes digitales doivent être comparées
move(Feature^,byt,len); file://Déplacer un segment en mémoire d'une longueur de len et déplacer les données à partir de Feature vers le tableau d'octets
uru_AllocFeature(aFeature);//Attribuer une adresse de données d'empreinte digitale
si (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature) = FT_OK) et uru_verifyFeatures (@byt, aFeature) alors
file://uru_AcquireFeaturesVérification des empreintes digitales
file://uru_verifyFeaturesComparaison d'empreintes digitales
commencer
Status.SimpleText := UserList.Selected.Caption + ': Vérification réussie !';
AssignFile(F,fingerpath);//Attribuer un fichier
ReWrite(F);//Réécrire le fichier
pour i:=0 à len faire
Write(F,byt[i]);//Écrire les données du capteur d'empreintes digitales dans un fichier
CloseFile(F);//Ferme le fichier
fin
autre
Status.SimpleText := UserList.Selected.Caption + ': La vérification a échoué !';
uru_FreeFeature(aFeature); fichier://libérer la mémoire
fin;
La clé du processus ci-dessus consiste à enregistrer rapidement les données d'empreintes digitales dans la mémoire dans un fichier de données une fois la vérification des empreintes digitales réussie. Le nom du fichier de données est de préférence le nom d'utilisateur plus un numéro, afin que les données d'empreintes digitales de l'utilisateur correspondantes puissent être facilement récupérées. trouvé lors d’une vérification ultérieure. Enfin, pensez à libérer la mémoire temporairement allouée. Stockez les données d'empreintes digitales dans un fichier. Vous pouvez ensuite ouvrir le fichier pour récupérer le fichier de données et effectuer un processus de correspondance avec l'utilisateur actuel pour vérifier l'identité correcte de l'utilisateur. Le processus spécifique est le suivant :
procédure TForm1.BitBtn2Click(Expéditeur : TObject); fichier://Vérifier l'ancienne empreinte digitale de l'utilisateur
var
aFonction1 : pointeur ;
je : entier ;
commencer
si OpenDialog1.Execute alors
commencer
AssignFile(G,OpenDialog1.FileName);//Spécifier le fichier
Réinitialiser (G);//Réinitialiser le fichier
pour i:=0 à len faire
Read(G, byt2[i]);//Déplacer les données du capteur d'empreintes digitales dans le fichier vers le tableau byte2
CloseFile(G);//Ferme le fichier
fin;
FillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Images[5].Actualiser ;
Status.SimpleText := 'Démarrer la vérification' + UserList.Selected.Caption + 'Fingerprint...';
uru_AllocFeature(aFeature1);//Attribuer une adresse de données d'empreinte digitale
si (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature1) = FT_OK) et uru_verifyFeatures (@byt2, aFeature1) alors
Status.SimpleText := UserList.Selected.Caption + ' : Vérification réussie ! »
autre
Status.SimpleText := UserList.Selected.Caption + ': La vérification a échoué !';
uru_FreeFeature(aFeature1); fichier://libérer la mémoire
fin;
En fait, les données d'empreintes digitales peuvent également être stockées dans une base de données, de sorte qu'un système de structure multicouche puisse être mis en œuvre de manière centralisée dans la base de données sur le serveur, ou que le client télécharge les données d'enregistrement sur le serveur. le lit à partir du serveur lorsque les anciens utilisateurs doivent être vérifiés, garantissant ainsi la sécurité.
4. Résumé
Cet article présente l'utilisation de U.are.U 2000 Le kit de développement du capteur d'empreintes digitales est développé pour un développement secondaire afin de mettre en œuvre un processus d'enregistrement, de vérification, de stockage des données et de revérification des anciennes empreintes digitales. Ce processus peut être utilisé dans certains systèmes qui doivent identifier les identités personnelles grâce aux empreintes digitales. L'auteur l'a développé sur cette base. Un prototype de système de gestion des permis de séjour temporaires pour les agences de sécurité publique ou les communautés résidentielles a été développé, qui met principalement en œuvre le La fonction de gestion des permis de séjour temporaires du ménage.Cet article présente uniquement la méthode d'appel de la DLL dans le package de développement du capteur d'empreintes digitales et les processus clés d'enregistrement et de vérification en développement secondaire Quant à la connexion, l'initialisation et l'affichage des images d'empreintes digitales. du périphérique d'empreintes digitales, car il est relativement simple, il n'y a donc pas de discussion approfondie. Les lecteurs peuvent le développer eux-mêmes sur la base des fonctions fournies par la DLL. Bienvenue à m'écrire pour discuter, mon email est [email protected]