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...