Login com Criptografia

Login com Criptografia...

Bom pessoal neste artigo aqui irei disponibilizar iremos criar uma tela de login criptografando as senhas....
Estou utilizando Delphi 2010. Firebird 2.5, componentes de conexão da IBO  ( 2 IBOQUERY (Uma para fazer o cadastro de um novo login e outra para buscar o usuário e a senha para efetuar o login), IB_TRANSACTION, IB_CONNECTION, DATASOURCE)e o componente para criptografar as senhas o JvVigenereCipher!
Não irei mim aprofundar sobre o banco de dados... Faça a conexão com o banco onde nele tenha uma tabela de login com os fields Usuario e Senha... Bem simples o banco só para teste...
 
No Evento OnCreate do formulário:
procedure TForm1.FormCreate(Sender: TObject);
begin
IB_Connection1.Password := 'masterkey';
IB_Connection1.Connect;
IBOQuery1.Open;
end;
 
 
Devemos inserir 3 Edits, 3 Labels e 3 buttons, para que nossa tela  fique como a imagem ao lado!
Devemos configurar o 3º edit e o 3º label com a propriedade visible como false e o btnCadastrarLogin a propriedade Enabled como False.
 
 
Código do Botão Novo
procedure TForm1.btnNovoClick(Sender: TObject);
Var
SenhaAdmin: String;
SenhaDigitada: String;
begin
// Teste de exemplo para liberar cadastro de novo login
SenhaAdmin := 'ADMIN';
SenhaDigitada:= InputBox('Informe a Senha de Administrador', 'Senha:','');

if SenhaDigitada <> SenhaAdmin then begin
   ShowMessage('Senha Admin inválida! Favor procurar administrador do sistema!');
   Exit;
end;
EditUsuario.SetFocus;
Label3.Visible := True;
EditRepitida.Visible := True;
 

Ao clicar no botão novo irá pedir uma senha de Administrador fiz um exemplo apenas para teste onde declarei a váriavel SenhaAdmin := 'ADMIN'; Ao informar a senha ADMIN irá liberar o cadastro de um novo LOGIN podemos melhorar mas isso será um lance mais complexo.


btncadastrarLogin.Enabled := btnNovo.Enabled;
btnNovo.Enabled := False;
end;

Código do Botão Cadastrar
procedure TForm1.btncadastrarLoginClick(Sender: TObject);
Var
ContSenha, ContRepitida: Integer;
begin
// testando se campo Usuário está preenchidos
if EditUsuario.Text = '' then begin
   ShowMessage('Favor informar Usuário!');
   EditUsuario.SetFocus;
   Exit;
end;
// Testando de campo senha está preenchido
if EditSenha.Text = '' then begin
   ShowMessage('Favor informar a senha!');
   EditSenha.SetFocus;
   Exit;
end;
//Testando qtd mínima de caracteres em uma senha
ContSenha := (Length(EditSenha.Text));
ContRepitida := (Length(EditRepitida.Text));
  if (ContSenha) or (ContRepitida) < 5  then begin
     ShowMessage('Senha deve ter no mínimo 6 caracteres!');
     EditSenha.SetFocus;
     Exit;
  end;
  // Testando se as senhas são compatíveis
  if EditSenha.Text <> EditRepitida.Text then begin
     ShowMessage('Senhas não compatíveis!');
     EditSenha.SetFocus;
     Exit;
  end;
  // Obrigatorio para uma criptografia
  JvVigenereCipher1.Key := 'Thiago'; /// chave
  JvVigenereCipher1.Decoded := EditSenha.Text;
  Result := JvVigenereCipher1.Encoded;   // Exibe a string encriptada
  IBOQuery1.Append;
  IBOQuery1.FieldByName('USUARIO').AsString := EditUsuario.Text;
  IBOQuery1.FieldByName('SENHA').AsString := JvVigenereCipher1.Encoded;
  IBOQuery1.Post;
  IBOQuery1.IB_Transaction.CommitRetaining;
  ShowMessage('Login Cadastrado com sucesso!');
end;
No Botão cadastrar fiz alguns teste como se o usuário e senhas foram informados, se a senha é maior que 5 caracteres e se as senhas são compatíveis a Senha do cadastro e o campo de repetição de senha. Após isso utilizei uma query para gravar os campos usuário e senha no banco.
 
 
Código do Botão Acessar
procedure TForm1.btnAcessarClick(Sender: TObject);
Var
SenhaCrip : String;
Usuario : String;
Result : String;
begin
JvVigenereCipher1.Key := 'Thiago';
JvVigenereCipher1.Decoded := EditSenha.Text;
Result := JvVigenereCipher1.Encoded;   // Exibe a string encriptada
usuario := EditUsuario.Text;
IBOQuery2.Close;
IBOQuery2.SQL.Add('Select USUARIO, SENHA FROM LOGIN WHERE USUARIO = ' + QuotedStr(EditUsuario.Text));
IBOQuery2.Open;
if ((Usuario = IBOQuery2.FieldByName('USUARIO').AsString)) and ((Result = IBOQuery2.FieldByName('SENHA').AsString)) then
   begin
   ShowMessage('Login Efetuado com sucesso!');
   IBOQuery2.SQL.Clear;
   end
   else begin
   ShowMessage('Usuário e/ou Senha inválido!');
   IBOQuery2.SQL.Clear;
end;
end;
 
No botão acessar utilizei o componente JvVigenereCipher para criptografar a senha onde informei uma key de teste utilizando meu nome como key encriptografei, logo depois utilizei uma query para buscar o usuário informado e comparei se a senha informada que foi criptografada é igual a senha gravada no banco que támbem encontra-se criptografa.
 
É galera é isso aí galera espero que tenham gostado! Dicas , sugestões e críticas serão bem vindas...
Pois ainda sou iniciante nesta área...
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados