Desarrollo secundario del sensor de huellas dactilares en Delphi
1. Introducción al sensor de huellas dactilares
Las huellas dactilares tienen la reputación de ser "las primeras pruebas físicas". La conclusión de la comunidad científica sobre las huellas dactilares es la siguiente: suponiendo que haya 5 mil millones de personas en la Tierra, se necesitarán 300 años para que aparezcan dos huellas dactilares idénticas. Se puede observar que la unicidad de las huellas dactilares tiene un estatus irrefutable.
Los sensores de huellas dactilares transformaron los sistemas de seguridad digitales tal como los conocemos por primera vez. Anteriormente, todo dependía de contraseñas. Debe utilizar su propio nombre de usuario y configurar su sistema. Debes cubrir tu teclado para que otros no puedan ver tu contraseña. Sin embargo, si no tienes cuidado, es fácil que cualquiera robe tu contraseña.
Los expertos relevantes predicen: "A través del sistema de reconocimiento de huellas dactilares, hemos ampliado las necesidades de seguridad de los usuarios de computadoras domésticas y comerciales. En un futuro cercano, ya sea en la red de área local o en Internet, ya sea registrándose o accediendo a datos de seguridad, será imposible hacerlo." Ya no es necesaria una contraseña, todo lo que se necesita es un toque con el dedo."
2. Introducción al desarrollo secundario del escáner de huellas dactilares.
Actualmente hay muchos fabricantes de escáneres de huellas dactilares en el mundo y tienen una gran influencia. La serie U.are.U de DigitalPersona es la más utilizada. DigitalPersona es el fabricante de teclados de computadora más grande del mundo. incluido en un acuerdo con Chicony Electronics para integrar el sistema de seguridad de detección de huellas dactilares U.are.U de DigitalPersona en teclados fabricados para HP, Compaq e IBM, entre otros.
El desarrollo secundario del sensor de huellas dactilares presentado en este artículo se basa en U.are.U 2000 de DigitalPersona. U.are.U es la abreviatura de you are you (usted es usted U.are.U 2000 Micro Fingerprint Collection). El dispositivo puede leer automáticamente imágenes de huellas dactilares y transmitirlas a la computadora a través de la interfaz USB. Es un accesorio ideal para computadoras portátiles, de escritorio u otros dispositivos de PC que requieren autenticación.
U.are.U 2000 es un lector de huellas dactilares compacto y de bajo coste. Integra un sistema óptico de precisión, una fuente de luz LED y una cámara CMOS para trabajar juntos para realizar el control de voltaje y la corrección automática durante la captura de imágenes, y utiliza una interfaz USB plug-and-play para la recolección de escaneo de huellas dactilares U.are.U 2000. conducir a DigitalPersona U.are.U Algoritmos, aplicaciones e interfaces de huellas dactilares para DigitalPersona Universal Authentication Manager (UAM): estas aplicaciones relacionadas con huellas dactilares incluyen Windows Inicio de sesión, bloqueo de pantalla, reemplazo de contraseña y unidad de disco cifrada.
Al comprar productos de hardware para sensores de huellas dactilares, los comerciantes suelen incluir controladores de hardware, manuales de productos, kits de desarrollo secundarios y ejemplos de programas de desarrollo. A través del kit de desarrollo de software (SDK), se puede agregar la función de reconocimiento de huellas dactilares a la aplicación.
3. Tecnologías clave en el proceso de desarrollo secundario de escáneres de huellas dactilares
llamada 1.dll
Primero, introduzcamos el método para llamar al dll en el kit de desarrollo del sensor de huellas dactilares en Delpi. Coloque uruShell.dll en el paquete de desarrollo en el directorio del programa o en el directorio del sistema. Para mayor claridad, las declaraciones de llamada de DLL se concentran en una unidad de programa Shelluru.pas, en la que se exportan las funciones de uruShell.dll y se realizan declaraciones de referencia relacionadas. El código fuente específico es el siguiente:
unidad Shelluru;
interfaz
utiliza ventanas, Mensajes;
constante
FT_OK = 0; // Éxito
FT_ERR_NO_INIT = -1; // Sin inicialización
FT_ERR_UNKNOWN_DEVICE = -10 // Dispositivo desconocido
FT_ERR_DEVICE_CONNECTED = -18 // El dispositivo está conectado
FT_ERR_NO_DEVICE_CONNECTED = -19 // No se puede conectar ningún dispositivo
MAX_REGISTER_COUNT= 8; // Número máximo de registros
ERR_REGISTER_FAIL= -110 // Error en el registro
ERR_VERIFY_FAIL= -111 // La verificación falló
ERR_REGISTER_COUNT= -112 // Número de registros
{El siguiente es un mensaje personalizado, mensaje de adquisición de huellas dactilares MSG_FINGER_CAPTURED }mensaje de espera de huellas dactilares MSG_WAITING_FOR_IMAGE.
MSG_FINGER_CAPTURED= WM_USER + 80;
MSG_WAITING_FOR_IMAGE= WM_USER + 81;
tipo
PRegisterPixels = ^TRegisterPixels;
TRegisterPixels = matriz[1..MAX_REGISTER_COUNT] de puntero;
///uru_Init inicializa el sensor de huellas dactilares. Parámetros: numOfDev devuelve el número de sensores de huellas dactilares conectados a la computadora; FeatureLen devuelve la longitud de los datos de huellas dactilares.
función uru_Init(var numOfDev, FeatureLen: entero): entero;
///uru_Connect se conecta a un sensor de huellas dactilares específico. Parámetro: DispositivoSin número de sensor de huellas dactilares.
función uru_Connect(DeviceNo: entero): entero;
///uru_Terminate se desconecta del sensor de huellas dactilares. Parámetro: DispositivoSin número de sensor de huellas dactilares.
procedimiento uru_Terminate(DeviceNo: entero);
///uru_AllocFeature asigna la dirección de datos de huellas dactilares. Parámetros: puntero de dirección devuelto por la característica.
procedimiento uru_AllocFeature(var Característica: puntero);
///uru_FreeFeature libera la dirección asignada. Parámetros: puntero de dirección devuelto por la característica.
procedimiento uru_FreeFeature(var Característica: puntero);
///uru_GetImageWidth obtiene el ancho de la imagen de la huella digital.
función uru_GetImageWidth: entero; llamada estándar;
///uru_GetImageHeight obtiene la altura de la imagen de la huella digital.
función uru_GetImageHeight: entero;
///uru_Register función de registro de huellas dactilares. Parámetros: identificador de ventana hwnd, utilizado para la transmisión de mensajes DevieceNo número de sensor de huellas dactilares;
///fngCount tiempos de registro de huellas dactilares; puntero de conexión de imagen de huellas dactilares de píxeles; Presenta un puntero de datos de registro de huellas dactilares.
función uru_Register(hwnd: HWND; DeviceNo, fngCount: entero; Píxeles: PRegisterPixels; Características: puntero): entero;
///uru_AcquireFeatures función de verificación de huellas dactilares. Parámetros: identificador de ventana hwnd, utilizado para la transmisión de mensajes; DevieceSin número de sensor de huellas dactilares.
función uru_AcquireFeatures(hwnd: HWND; DeviceNo: entero; Píxeles, Características: puntero): entero;
///uru_verifyFeatures función de comparación de huellas dactilares. Parámetros: srcFeatures necesita comparar datos de huellas dactilares; dstFeatures necesita comparar datos de huellas dactilares.
función uru_verifyFeatures(srcFeatures, dstFeatures: puntero): booleano;
/// función de registro dll
procedimiento uru_DllRegister;
/// Interrumpe la función de imagen del sensor de huellas dactilares específica. Parámetro: DispositivoSin número de sensor de huellas dactilares.
Procedimiento uru_StopGetImage(DeviceNO:Integer);Stdcall;
implementación
constante
DLLNAME= 'uruShell.dll';
{La siguiente es la declaración de llamada a la función exportada de uruShell.dll}
función uru_Init; DLLNAME externo;
función uru_Connect; DLLNAME externo;
procedimiento uru_Terminate; DLLNAME externo;
procedimiento uru_AllocFeature; DLLNAME externo;
procedimiento uru_FreeFeature; DLLNAME externo;
función uru_GetImageWidth; DLLNAME externo;
función uru_GetImageHeight DLLNAME externo;
función uru_Register; DLLNAME externo;
función uru_AcquireFeatures; DLLNAME externo;
función uru_verifyFeatures; DLLNAME externo;
procedimiento uru_DllRegister; DLLNAME externo;
Procedimiento uru_StopGetImage;DLLNAME externo;
fin.
Después de completar el trabajo anterior, puede hacer referencia al archivo Shelluru.pas en el archivo principal del proyecto y luego llamar a las funciones definidas en el archivo Shelluru.pas.
2. Guarde los datos de huellas dactilares verificados en un archivo o base de datos.
Al llamar a las funciones definidas anteriormente, podemos implementar un sistema de identificación de huellas dactilares para el registro, verificación, almacenamiento de datos de huellas dactilares y reverificación (reconocimiento) de huellas dactilares. A continuación se enfoca la implementación de la programación del proceso de identificación de registro y verificación de huellas dactilares:
procedimiento TForm1.BtnRegisterClick (Remitente: TObject file://Registrar huella digital);
var
yo: entero;
comenzar
si UserList.Selected = nulo entonces
comenzar
MessageBox(application.Handle, '¡Primero seleccione un usuario!', nil, MB_OK);
Salida;
fin;
si UserList.Selected.Data <> nulo entonces
Característica := UserList.Selected.Data file://La característica está vacía en este momento
demás
uru_AllocFeature(Característica);
si Característica = nil entonces file://Si la característica de huella digital está vacía
comenzar
Status.SimpleText := 'No se puede asignar memoria de funciones';
Salida;
fin;
para i := 1 a 4 hacer
comenzar
FillChar(Píxeles[i]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Imágenes[i].Actualizar;
fin;
Status.SimpleText := 'Iniciar registro' + UserList.Selected.Caption + 'Huella digital...';
si uru_Register(Handle, DeviceNo, 4, @Pixels, Feature) = FT_OK entonces
comenzar
Status.SimpleText := UserList.Selected.Caption + ': ¡Registro exitoso!';
si UserList.Selected.Data = nil entonces
UserList.Selected.Data: = Característica;
fin
demás
comenzar
si UserList.Selected.Data = nil entonces uru_FreeFeature(Feature);
Status.SimpleText := UserList.Selected.Caption + ': ¡Error en el registro!';
fin;
fin;
Esta función llama principalmente a la función uru_Register en la DLL para registrar huellas digitales para los usuarios. El registro de huellas digitales consiste en extraer el valor característico de la huella digital, asignar un extremo de la memoria para el valor característico para almacenar los datos del valor característico de la huella digital y usar un puntero para. apunte a esta memoria, para que pueda ser recuperada en el futuro. Una vez completado el registro, se debe realizar una verificación inmediatamente para garantizar que los datos sean correctos. El proceso de verificación es el siguiente:
procedimiento TForm1.BtnVerifyClick (Remitente: TObject file://verificación de huella digital);
var
aCaracterística:puntero;
yo: número entero;
camino del dedo: cuerda;
comenzar
fingerpath:='C:/finger'+Edit9.Text+Edit10.Text;//Ruta de almacenamiento de datos de huellas dactilares
si UserList.Selected = nulo entonces
comenzar
MessageBox(Application.Handle, '¡Primero seleccione un usuario!', nil, MB_OK);
Salida;
fin;
si UserList.Selected.Data = nil entonces
comenzar
MessageBox(Application.Handle, PChar(Format('El usuario %s aún no ha registrado su huella digital, ¡regístrese primero!', [UserList.Selected.Caption])), nil, MB_OK);
Salida;
fin;
FillChar(Píxeles[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Imágenes[5].Actualizar;
Status.SimpleText := 'Iniciar verificación' + UserList.Selected.Caption + 'Huella digital...';
Característica := UserList.Selected.Data; file://Los datos de huellas dactilares deben compararse
move(Feature^,byt,len); file://Mueve un segmento en la memoria con una longitud de len y mueve los datos comenzando desde Feature a la matriz de bytes.
uru_AllocFeature(aFeature);//Asignar dirección de datos de huellas dactilares
si (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature) = FT_OK) y uru_verifyFeatures(@byt, aFeature) entonces
file://uru_AcquireFeaturesVerificación de huellas dactilares
file://uru_verifyCaracterísticasComparación de huellas dactilares
comenzar
Status.SimpleText := UserList.Selected.Caption + ': ¡Verificación exitosa!';
AssignFile(F,fingerpath);//Asignar archivo
ReWrite(F);//Reescribe el archivo
para i:=0 a len hacer
Write(F,byt[i]);//Escribir datos del sensor de huellas dactilares en un archivo
CloseFile(F);//Cerrar el archivo
fin
demás
Status.SimpleText := UserList.Selected.Caption + ': ¡Falló la verificación!';
uru_FreeFeature(aFeature); archivo://liberar memoria);
fin;
La clave del proceso anterior es guardar rápidamente los datos de las huellas dactilares en la memoria en un archivo de datos después de que la verificación de las huellas dactilares sea exitosa. El nombre del archivo de datos es preferiblemente el nombre del usuario más un número, de modo que los datos de las huellas dactilares del usuario correspondientes puedan recuperarse fácilmente. encontrado durante la verificación posterior. Finalmente, recuerde liberar la memoria asignada temporalmente. Almacene los datos de huellas dactilares en un archivo. Luego puede abrir el archivo para recuperar el archivo de datos y realizar un proceso de comparación con el usuario actual para verificar la identidad correcta del usuario.
procedimiento TForm1.BitBtn2Click (Remitente: TObject file://Verificar huella digital del usuario anterior);
var
aCaracterística1: puntero;
yo: número entero;
comenzar
si OpenDialog1.Execute entonces
comenzar
AssignFile(G,OpenDialog1.FileName);//Especificar archivo
Restablecer(G);//Restablecer archivo
para i:=0 a len hacer
Read(G, byt2[i]);//Mueve los datos del sensor de huellas dactilares en el archivo a la matriz byte2
CloseFile(G);//Cerrar el archivo
fin;
FillChar(Píxeles[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Imágenes[5].Actualizar;
Status.SimpleText := 'Iniciar verificación' + UserList.Selected.Caption + 'Huella digital...';
uru_AllocFeature(aFeature1);//Asignar dirección de datos de huellas dactilares
si (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature1) = FT_OK) y uru_verifyFeatures(@byt2, aFeature1) entonces
Status.SimpleText := UserList.Selected.Caption + ': ¡Verificación exitosa!'
demás
Status.SimpleText := UserList.Selected.Caption + ': ¡Falló la verificación!';
uru_FreeFeature(aFeature1); archivo://liberar memoria;
fin;
De hecho, los datos de huellas dactilares también se pueden almacenar en una base de datos, de modo que se puede acceder de forma centralizada a los datos de huellas dactilares en la base de datos del servidor, o el cliente carga los datos de registro en el servidor. lo lee desde el servidor cuando los usuarios antiguos necesitan ser verificados, garantizando la seguridad.
4. Resumen
Este artículo presenta el uso de U.are.U 2000. El kit de desarrollo del sensor de huellas dactilares está desarrollado para desarrollo secundario para implementar un proceso de registro de datos de huellas dactilares, verificación, almacenamiento de datos y reverificación de huellas dactilares antiguas. Este proceso se puede utilizar en algunos sistemas que necesitan identificar identidades personales a través de huellas dactilares. Sobre esta base, el autor desarrolló un prototipo de sistema de gestión de permisos de residencia temporal para agencias de seguridad pública o comunidades residenciales, que realiza principalmente la La función de gestión del permiso de residencia temporal del usuario. Este artículo solo presenta el método de llamada a la DLL en el paquete de desarrollo del sensor de huellas dactilares y los procesos clave de registro y verificación en el desarrollo secundario en cuanto a la conexión, inicialización y visualización de imágenes de huellas dactilares. Dispositivo de huellas dactilares, porque es relativamente simple, por lo que no hay una discusión en profundidad. Los lectores pueden desarrollarlo ellos mismos en función de las funciones proporcionadas por el dll. Bienvenido a escribirme para discutir, mi correo electrónico es [email protected]