Desenvolvimento secundário de sensor de impressão digital em Delphi
1. Introdução ao sensor de impressão digital
As impressões digitais têm a reputação de "a primeira evidência física". A conclusão da comunidade científica sobre as impressões digitais é: Supondo que existam 5 mil milhões de pessoas na Terra, serão necessários 300 anos para que apareçam duas impressões digitais idênticas. Percebe-se que a singularidade das impressões digitais tem um status irrefutável.
Os sensores de impressão digital transformaram os sistemas de segurança digital como os conhecemos pela primeira vez. Anteriormente, tudo dependia de senhas. Você deve usar seu próprio nome de usuário e configurar seu sistema. Você deve cobrir o teclado para que outras pessoas não possam ver sua senha. No entanto, se você não tomar cuidado, é fácil alguém roubar sua senha.
Especialistas relevantes prevêem: "Através do sistema de reconhecimento de impressões digitais, expandimos as necessidades de segurança dos usuários de computadores domésticos e empresariais. Num futuro próximo, seja na rede local ou na Internet, seja para registrar ou acessar dados de segurança, será impossível fazê-lo." Não há mais necessidade de senha, basta um toque do seu dedo."
2. Introdução ao desenvolvimento secundário do scanner de impressão digital
Atualmente, existem muitos fabricantes de scanners de impressão digital no mundo e eles têm grande influência. A série U.are.U da DigitalPersona é a mais utilizada. DigitalPersona é o maior fabricante mundial de teclados de computador. incluído em um acordo com a Chicony Electronics para integrar o sistema de segurança com sensor de impressão digital U.are.U da DigitalPersona em teclados fabricados para HP, Compaq e IBM, entre outros.
O desenvolvimento secundário do sensor de impressão digital apresentado neste artigo é baseado no U.are.U 2000 da DigitalPersona. U.are.U é a abreviatura de você é você (você é você U.are.U 2000 Micro Fingerprint Collection The). O dispositivo pode ler automaticamente imagens de impressões digitais e transmitir as imagens de impressões digitais para o computador através da interface USB. É um acessório ideal para laptops, desktops ou outros dispositivos de PC que requerem autenticação.
U.are.U 2000 é um leitor de impressão digital compacto e de baixo custo. Ele integra um sistema óptico de precisão, fonte de luz LED e câmera CMOS para trabalhar em conjunto para realizar controle de tensão e correção automática durante a captura de imagem, e usa uma interface USB plug-and-play U.are.U 2000 para coleta de digitalização de impressões digitais. levam a algoritmos de impressão digital DigitalPersona U.are.U, aplicativos e interfaces para o DigitalPersona Universal Authentication Manager (UAM) - esses aplicativos relacionados a impressões digitais incluem o Windows Login, bloqueio de tela, substituição de senha e unidade de disco criptografada.
Ao comprar produtos de hardware para sensores de impressão digital, os comerciantes geralmente incluem drivers de hardware, manuais de produtos, kits de desenvolvimento secundários e exemplos de programas de desenvolvimento. Através do kit de desenvolvimento de software (SDK), a função de reconhecimento de impressão digital pode ser adicionada ao aplicativo.
3. Tecnologias-chave no processo de desenvolvimento secundário de scanners de impressões digitais
Chamada 1.dll
Primeiro, vamos apresentar o método de chamada da dll no kit de desenvolvimento do sensor de impressão digital no delpi. Coloque o uruShell.dll no pacote de desenvolvimento no diretório do programa ou no diretório do sistema. Para maior clareza, as instruções de chamada de DLL estão concentradas em uma unidade de programa Shelluru.pas, na qual as funções de uruShell.dll são exportadas e as instruções de referência relacionadas são feitas.
unidade Shelluru;
interface
usa janelas, Mensagens;
const
FT_OK = 0;/Sucesso
FT_ERR_NO_INIT = -1; // Sem inicialização
FT_ERR_UNKNOWN_DEVICE = -10; // Dispositivo desconhecido
FT_ERR_DEVICE_CONNECTED = -18; // O dispositivo está conectado
FT_ERR_NO_DEVICE_CONNECTED = -19; // Nenhum dispositivo pode ser conectado
MAX_REGISTER_COUNT= 8; // Número máximo de registros
ERR_REGISTER_FAIL= -110; // Registro falhou
ERR_VERIFY_FAIL= -111; // Falha na verificação
ERR_REGISTER_COUNT= -112; // Número de registros
{A seguir está uma mensagem personalizada, mensagem de aquisição de impressão digital MSG_FINGER_CAPTURED }MSG_WAITING_FOR_IMAGE mensagem de espera de impressão digital;
MSG_FINGER_CAPTURED= WM_USER + 80;
MSG_WAITING_FOR_IMAGE= WM_USER + 81;
tipo
PRRegisterPixels = ^TRegisterPixels;
TRegisterPixels = array[1..MAX_REGISTER_COUNT] do Ponteiro;
///uru_Init inicializa o sensor de impressão digital. Parâmetros: numOfDev retorna o número de sensores de impressão digital conectados ao computador. FeatureLen retorna o comprimento dos dados de impressão digital.
função uru_Init (var numOfDev, FeatureLen: inteiro): inteiro;
///uru_Connect se conecta a um sensor de impressão digital específico. Parâmetro: DeviceNo número do sensor de impressão digital.
função uru_Connect(DeviceNo: inteiro): inteiro;
///uru_Terminate desconecta do sensor de impressão digital. Parâmetro: DeviceNo número do sensor de impressão digital.
procedimento uru_Terminate(DeviceNo: inteiro);
///uru_AllocFeature atribui endereço de dados de impressão digital. Parâmetros: Ponteiro de endereço retornado por Feature.
procedimento uru_AllocFeature(var Recurso: ponteiro);
///uru_FreeFeature libera o endereço alocado. Parâmetros: Ponteiro de endereço retornado por Feature.
procedimento uru_FreeFeature(var Recurso: ponteiro);
///uru_GetImageWidth obtém a largura da imagem da impressão digital.
função uru_GetImageWidth: inteiro;
///uru_GetImageHeight obtém a altura da imagem da impressão digital.
função uru_GetImageHeight: inteiro;
///uru_Register função de registro de impressão digital. Parâmetros: identificador de janela hwnd, usado para transmissão de mensagens DeviceNo número do sensor de impressão digital;
///fngCount tempos de registro de impressão digital; Ponteiro de conexão de imagem de impressão digital de pixels;
função uru_Register (hwnd: HWND; DeviceNo, fngCount: inteiro; Pixels: PRegisterPixels; Recursos: ponteiro): inteiro;
///uru_AcquireFeatures função de verificação de impressão digital. Parâmetros: identificador de janela hwnd, usado para transmissão de mensagens DevieceNo número do sensor de impressão digital.
função uru_AcquireFeatures (hwnd: HWND; DeviceNo: inteiro; Pixels, Recursos: ponteiro): inteiro;
///uru_verifyFeatures função de comparação de impressões digitais. Parâmetros: srcFeatures precisa comparar dados de impressão digital; dstFeatures precisa comparar dados de impressão digital.
função uru_verifyFeatures (srcFeatures, dstFeatures: ponteiro): Boolean;
///função de registro de dll
procedimento uru_DllRegister;
///Interrompe a função específica de imagem do sensor de impressão digital. Parâmetro: DeviceNo número do sensor de impressão digital.
Procedimento uru_StopGetImage(DeviceNO:Integer);Stdcall;
implementação
const
DLLNAME= 'uruShell.dll';
{A seguir está a declaração de chamada da função exportada de uruShell.dll}
função uru_Init; DLLNAME externo;
função uru_Connect; DLLNAME externo;
procedimento uru_Terminate; DLLNAME externo;
procedimento uru_AllocFeature; DLLNAME externo;
procedimento uru_FreeFeature; DLLNAME externo;
função uru_GetImageWidth; DLLNAME externo;
função uru_GetImageHeight DLLNAME externo;
função uru_Register; DLLNAME externo;
função uru_AcquireFeatures DLLNAME externo;
função uru_verifyFeatures DLLNAME externo;
procedimento uru_DllRegister; DLLNAME externo;
Procedimento uru_StopGetImage;DLLNAME externo;
fim.
Depois de concluir o trabalho acima, você pode referenciar o arquivo Shelluru.pas no arquivo principal do projeto e, em seguida, chamar as funções definidas no arquivo Shelluru.pas.
2. Salve os dados de impressão digital verificados em um arquivo ou banco de dados
Ao chamar as funções definidas acima, podemos implementar um sistema de identificação de impressões digitais para registro, verificação, armazenamento de dados de impressões digitais e reverificação (reconhecimento) de impressões digitais. O seguinte centra-se na implementação da programação do processo de registo e verificação de impressões digitais:
procedimento TForm1.BtnRegisterClick(Sender: TObject file://Registrar impressão digital);
var
eu: inteiro;
começar
se UserList.Selected = nulo então
começar
MessageBox(application.Handle, 'Selecione um usuário primeiro!', nil, MB_OK);
Saída;
fim;
se UserList.Selected.Data <> nulo então
Recurso := UserList.Selected.Data file://Feature está vazio neste momento
outro
uru_AllocFeature(Recurso);
if Feature = nil then file://Se o recurso de impressão digital estiver vazio
começar
Status.SimpleText := 'Não é possível alocar memória de recurso';
Saída;
fim;
para eu := 1 a 4 faça
começar
FillChar(Pixels[i]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Imagens[i].Atualizar;
fim;
Status.SimpleText := 'Iniciar registro' + UserList.Selected.Caption + 'Impressão digital...';
se uru_Register(Handle, DeviceNo, 4, @Pixels, Feature) = FT_OK então
começar
Status.SimpleText := UserList.Selected.Caption + ': Registro bem-sucedido!';
se UserList.Selected.Data = nulo então
UserList.Selected.Data := Recurso;
fim
outro
começar
se UserList.Selected.Data = nil então uru_FreeFeature(Feature);
Status.SimpleText := UserList.Selected.Caption + ': Falha no registro!';
fim;
fim;
Esta função chama principalmente a função uru_Register na DLL para registrar impressões digitais para usuários. Registrar impressões digitais é extrair o valor característico da impressão digital, alocar uma extremidade da memória para o valor característico para armazenar os dados do valor característico da impressão digital e usar um ponteiro para. aponte para esta memória, para que ela possa ser recuperada no futuro. Após a conclusão do registro, uma verificação deve ser realizada imediatamente para garantir que os dados estão corretos. O processo de verificação é o seguinte:
procedimento TForm1.BtnVerifyClick(Sender: TObject file://verificação de impressão digital);
var
aRecurso:ponteiro;
eu: inteiro;
trajetória do dedo: corda;
começar
fingerpath:='C:/finger'+Edit9.Text+Edit10.Text;//Caminho de armazenamento de dados de impressão digital
se UserList.Selected = nulo então
começar
MessageBox(Application.Handle, 'Por favor selecione um usuário primeiro!', nil, MB_OK);
Saída;
fim;
se UserList.Selected.Data = nulo então
começar
MessageBox(Application.Handle, PChar(Format('O usuário %s ainda não registrou a impressão digital, registre-se primeiro!', [UserList.Selected.Caption])), nil, MB_OK);
Saída;
fim;
FillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Imagens[5].Atualizar;
Status.SimpleText := 'Iniciar verificação' + UserList.Selected.Caption + 'Impressão digital...';
Recurso := UserList.Selected.Data file://Dados de impressão digital precisam ser comparados
move(Feature^,byt,len); file://Move um segmento na memória com um comprimento de len e mova os dados começando de Feature para a matriz de bytes.
uru_AllocFeature(aFeature); //Atribuir endereço de dados de impressão digital
if (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature) = FT_OK) e uru_verifyFeatures(@byt, aFeature) então
file://uru_AcquireFeaturesVerificação de impressão digital
file://uru_verifyFeaturesComparação de impressão digital
começar
Status.SimpleText := UserList.Selected.Caption + ': Verificação bem-sucedida!';
AssignFile(F,fingerpath); //Atribuir arquivo
ReWrite(F); //Reescreve o arquivo
para i:=0 para len do
Write(F,byt[i]); //Escreve os dados do sensor de impressão digital no arquivo
CloseFile(F); //Fecha o arquivo
fim
outro
Status.SimpleText := UserList.Selected.Caption + ': Falha na verificação!';
uru_FreeFeature(aFeature); arquivo://liberar memória
fim;
A chave para o processo acima é salvar imediatamente os dados da impressão digital na memória em um arquivo de dados após a verificação da impressão digital ser bem-sucedida. O nome do arquivo de dados é preferencialmente o nome do usuário mais um número, para que os dados de impressão digital do usuário correspondentes possam ser facilmente. encontrado durante a verificação subsequente. Finalmente, lembre-se de liberar a memória alocada temporariamente. Armazene os dados da impressão digital em um arquivo. Você pode então abrir o arquivo para recuperar o arquivo de dados e realizar um processo de correspondência com o usuário atual para verificar a identidade correta do usuário.
procedimento TForm1.BitBtn2Click(Sender: TObject file://Verificar impressão digital do usuário antigo);
var
aFeature1: ponteiro;
eu: inteiro;
começar
se OpenDialog1.Execute então
começar
AssignFile(G,OpenDialog1.FileName);//Especificar arquivo
Redefinir(G); //Redefinir arquivo
para i:=0 para len do
Read(G, byt2[i]);//Move os dados do sensor de impressão digital no arquivo para o array byte2
CloseFile(G); //Fecha o arquivo
fim;
FillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Imagens[5].Atualizar;
Status.SimpleText := 'Iniciar verificação' + UserList.Selected.Caption + 'Impressão digital...';
uru_AllocFeature(aFeature1); //Atribuir endereço de dados de impressão digital
if (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature1) = FT_OK) e uru_verifyFeatures(@byt2, aFeature1) então
Status.SimpleText := UserList.Selected.Caption + ': Verificação bem-sucedida!'
outro
Status.SimpleText := UserList.Selected.Caption + ': Falha na verificação!';
uru_FreeFeature(aFeature1); arquivo://liberar memória
fim;
Na verdade, os dados de impressões digitais também podem ser armazenados em um banco de dados, de modo que um sistema de estrutura multicamadas possa ser implementado centralmente no banco de dados do servidor. O cliente carrega os dados de registro no servidor, conforme necessário. lê-os do servidor quando usuários antigos precisam ser verificados, garantindo a segurança.
4. Resumo
Este artigo apresenta o uso do U.are.U 2000 O kit de desenvolvimento do sensor de impressão digital é desenvolvido para desenvolvimento secundário para implementar um processo de registro, verificação, armazenamento de dados e reverificação de impressões digitais antigas. Este processo pode ser usado em alguns sistemas que precisam identificar identidades pessoais por meio de impressões digitais. Com base nisso, o autor desenvolveu um protótipo de sistema de gerenciamento de autorização de residência temporária para órgãos de segurança pública ou comunidades residenciais, que realiza principalmente o. A função de gerenciamento de autorização de residência temporária do usuário Este artigo apresenta apenas o método de chamada da DLL no pacote de desenvolvimento do sensor de impressão digital e os principais processos de registro e verificação no desenvolvimento secundário. dispositivo de impressão digital, porque é relativamente simples, portanto, não há discussão aprofundada. Os leitores podem desenvolvê-lo por conta própria com base nas funções fornecidas pela dll. Bem-vindo, escreva para mim para discutir, meu e-mail é [email protected]