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;
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:','');
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;
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;
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...
Pois ainda sou iniciante nesta área...
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo