Criptografia
Bom dia galera!
Gostaria da ajuda de vcs, tenho duvidas em como posso fazer uma tela de login Criptografada!
Componentes que vcs utilizam, código fontes, dicas serão bem vindas!
Espero que possamos compartilhar conhecimento...
AbraçoO
Thiago Santana
Curtidas 0
Respostas
Thiago Santana
25/02/2010
Ah galera esqueci de dizer que esta tela de login será ligado a um banco de dados salvando a senha criptografa em um campo no BD!
Espero que possam mim ajudar!
AbraçoO
GOSTEI 0
Frost
25/02/2010
Boa Tarde
Thyago
dica bem simples pois não estou no trabalho agora
Usando o DELPHI 2010 com JVCL - componente usado para criptografia - JvVigenereCipher1
já no delphi 2007 se não me engano vem um componente padrao para criptografia
procedure TForm1.Button1Click(Sender: TObject);
var
Result : String;
begin
// Obrigatorio para uma criptografia
JvVigenereCipher1.Key := '22algumacoisa'; /// chave
//String nao encriptada
JvVigenereCipher1.Decoded := Edit1.Text;
// Resulta a string encriptada
Result := JvVigenereCipher1.Encoded; // Exibe a string encriptada
JvVigenereCipher1.Decoded := ' ' ; // Limpa a string nao encriptada
//Informa somente a string encrpitada
JvVigenereCipher1.Encoded := Result;
// Exibe o resultado do decript
Result := JvVigenereCipher1.Decoded;
Edit3.Text := Result;
end;
end.
Thyago
dica bem simples pois não estou no trabalho agora
Usando o DELPHI 2010 com JVCL - componente usado para criptografia - JvVigenereCipher1
já no delphi 2007 se não me engano vem um componente padrao para criptografia
procedure TForm1.Button1Click(Sender: TObject);
var
Result : String;
begin
// Obrigatorio para uma criptografia
JvVigenereCipher1.Key := '22algumacoisa'; /// chave
//String nao encriptada
JvVigenereCipher1.Decoded := Edit1.Text;
// Resulta a string encriptada
Result := JvVigenereCipher1.Encoded; // Exibe a string encriptada
JvVigenereCipher1.Decoded := ' ' ; // Limpa a string nao encriptada
//Informa somente a string encrpitada
JvVigenereCipher1.Encoded := Result;
// Exibe o resultado do decript
Result := JvVigenereCipher1.Decoded;
Edit3.Text := Result;
end;
end.
GOSTEI 0
Thiago Santana
25/02/2010
Gostei do exemplo Frost eu utilizo delphi 2010 tbein...
Então devo salvar a senha encriptografada no banco e na hora de efetuar o login devo descriptografa-lá e comparar com a senha informada pelo usuário?
Ou devo encriptografar a senha de login do usuário e compara-lá com a que está encriptografada no banco?
E o delphi 2010 já vem com algum componente para encriptografar ou devo instalar?
No meu trabalho tem este componente: JvVigenereCipher1...
GOSTEI 0
Perivaldo Martins
25/02/2010
Thiago, criptografia é um assunto muito extenso, e requer estudo, a medida que se estuda sobre assunto, se aprende sobre os algoritmos, chaves com 64, 128 bits, chave rush, etc.
Mas em um primeiro momento, vc poderia usar a solução proposta pelo colega ou tentar alguma coisa bem simples, porém funcional.
Lembrando que nenhuma chave é 100% segura, a galera quebra chaves de grandes sistemas não é mesmo?
Dê uma olhada no código abaixo.
function Encode(StrValue : String; Chave: Word) : String;
var
I: Integer;
OutValue : String;
begin
OutValue := '';
for I := 1 to Length(StrValue) do
OutValue := OutValue + char(Not(ord(StrValue[I])-Chave));
Result := OutValue;
end; Modo de utilização: Edit2.Text := Encode(Edit1.Text, 879); Esse código pode ser usado para criptografar e descriptografar. Qualquer coisa, estaremos a disposição. Boa sorte e bons códigos.
var
I: Integer;
OutValue : String;
begin
OutValue := '';
for I := 1 to Length(StrValue) do
OutValue := OutValue + char(Not(ord(StrValue[I])-Chave));
Result := OutValue;
end; Modo de utilização: Edit2.Text := Encode(Edit1.Text, 879); Esse código pode ser usado para criptografar e descriptografar. Qualquer coisa, estaremos a disposição. Boa sorte e bons códigos.
GOSTEI 0
Perivaldo Martins
25/02/2010
Eu geralmente prefiro comparar as strings criptografadas, não gosto muito de descriptografar para comparar, mas claro que depende do desenvolvedor e de como ele implementou seus metodos de codificação da string.
Boa sorte!
GOSTEI 0
Thiago Santana
25/02/2010
Blza Perivaldo...
Assim comecei a trabalhar profissionalmente com Delphi a pouco tempo, então quero mim aprofundar o máximo!
Pois no meu trabalho requer muito o domínio nessas areas...
Os componentes para encriptografar ajudam bastante né?
E sobre o tópico da Inputbox?
GOSTEI 0
Thiago Santana
25/02/2010
Perivaldo olha aê o que eu consegui fazer com as dicas que vc e o frost mim passaram:
procedure TForm1.btncadastrarLoginClick(Sender: TObject);
begin
// Obrigatorio para uma criptografia
JvVigenereCipher1.Key := 'Thiago'; /// chave teste JvVigenereCipher1.Decoded := EditSenha.Text;
Result := JvVigenereCipher1.Encoded; // Exibe a string encriptada
Label3.Caption := Result;
IBOQuery1.Append;
IBOQuery1.FieldByName('USUARIO').AsString := EditUsuario.Text;
IBOQuery1.FieldByName('SENHA').AsString := JvVigenereCipher1.Encoded;
IBOQuery1.Post;
IBOQuery1.IB_Transaction.CommitRetaining; end; procedure TForm1.btnAcessarClick(Sender: TObject);
Var
SenhaCrip : String;
Usuario : String;
Result : String;
begin
JvVigenereCipher1.Key := 'Thiago'; // Só foi um teste de key
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;
O que você achou? Ficou bom ou devo mudar algo? Agradecido...
begin
// Obrigatorio para uma criptografia
JvVigenereCipher1.Key := 'Thiago'; /// chave teste JvVigenereCipher1.Decoded := EditSenha.Text;
Result := JvVigenereCipher1.Encoded; // Exibe a string encriptada
Label3.Caption := Result;
IBOQuery1.Append;
IBOQuery1.FieldByName('USUARIO').AsString := EditUsuario.Text;
IBOQuery1.FieldByName('SENHA').AsString := JvVigenereCipher1.Encoded;
IBOQuery1.Post;
IBOQuery1.IB_Transaction.CommitRetaining; end; procedure TForm1.btnAcessarClick(Sender: TObject);
Var
SenhaCrip : String;
Usuario : String;
Result : String;
begin
JvVigenereCipher1.Key := 'Thiago'; // Só foi um teste de key
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;
O que você achou? Ficou bom ou devo mudar algo? Agradecido...
GOSTEI 0
Perivaldo Martins
25/02/2010
Não uso componentes JVCL (jedi), mas vc já testou? Se funcionou tudo blz, então tá certinho, com o tempo vc vai ver se precisa ou não enxugar seu código.
Como não utilizo o componente não posso expressar comentários mais aprofundados, mas creio q ficou bom.
boa sorte e bons códigos.
GOSTEI 0