ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Função para criptografia

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Qui Set 26, 2013 9:23 am    Assunto: Função para criptografia Responder com Citação

Pessoal,

Preciso de uma função para criptografar a senha do banco que vai no executável. Tenho uma mas não quero usá-la pois muito simples e fácil de quebrar, preciso de uma mais forte..

Voces tem alguma ?

Grato.

Código:
function Crypt(Action, Src, Key : String) : String;
var
     KeyLen    : Integer;
     KeyPos    : Integer;
     offset    : Integer;
     dest      : string;
     SrcPos    : Integer;
     SrcAsc    : Integer;
     TmpSrcAsc : Integer;
     Range     : Integer;
begin
     dest:='';
     KeyLen:=Length(Key);
     KeyPos:=0;
     SrcPos:=0;
     SrcAsc:=0;
     Range:=256;
     if Action = UpperCase('E') then
     begin
          Randomize;
          offset:=Random(Range);
          dest:=format('%1.2x',[offset]);
          for SrcPos := 1 to Length(Src) do
          begin
               SrcAsc:=(Ord(Src[SrcPos]) + offset) MOD 255;
               if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
               SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
               dest:=dest + format('%1.2x',[SrcAsc]);
               offset:=SrcAsc;
          end;
     end;
     if Action = UpperCase('D') then
     begin
          offset:=StrToInt('$'+ copy(src,1,2));
          SrcPos:=3;
          repeat
                SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
                if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;
                TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
                if TmpSrcAsc <offset>= Length(Src);
     end;
     Result:=dest;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
AllanRM
Novato
Novato


Registrado: Quinta-Feira, 28 de Janeiro de 2010
Mensagens: 56
Localização: Jaraguá do Sul-SC

MensagemEnviada: Qui Set 26, 2013 1:34 pm    Assunto: Re: Função para criptografia Responder com Citação

claudio.ferreira escreveu:
Pessoal,

Preciso de uma função para criptografar a senha do banco que vai no executável. Tenho uma mas não quero usá-la pois muito simples e fácil de quebrar, preciso de uma mais forte..

Voces tem alguma ?

Grato.

Código:
function Crypt(Action, Src, Key : String) : String;
var
     KeyLen    : Integer;
     KeyPos    : Integer;
     offset    : Integer;
     dest      : string;
     SrcPos    : Integer;
     SrcAsc    : Integer;
     TmpSrcAsc : Integer;
     Range     : Integer;
begin
     dest:='';
     KeyLen:=Length(Key);
     KeyPos:=0;
     SrcPos:=0;
     SrcAsc:=0;
     Range:=256;
     if Action = UpperCase('E') then
     begin
          Randomize;
          offset:=Random(Range);
          dest:=format('%1.2x',[offset]);
          for SrcPos := 1 to Length(Src) do
          begin
               SrcAsc:=(Ord(Src[SrcPos]) + offset) MOD 255;
               if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
               SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
               dest:=dest + format('%1.2x',[SrcAsc]);
               offset:=SrcAsc;
          end;
     end;
     if Action = UpperCase('D') then
     begin
          offset:=StrToInt('$'+ copy(src,1,2));
          SrcPos:=3;
          repeat
                SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
                if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;
                TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
                if TmpSrcAsc <offset>= Length(Src);
     end;
     Result:=dest;
end;



Desde que vc use uma chave de segurança boa, essa sua função vai ter uma criptografia legal ex: Key:= #oP&mn&¨*%$!@$TSrrd$.

E o Random faz com que essa função gere sempre uma sequencia de caracteres diferentes, mesmo que vc mande criptografar uma mesma string duas vezes, ele vai retornar duas sequencias diferentes.
_________________
“ Imaginação é o começo da criação; nós imaginamos o que desejamos, somos o que imaginamos, e criamos o que somos. Integridade é o que fazemos, o que dizemos, e o que dizemos que fazemos.”
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
AllanRM
Novato
Novato


Registrado: Quinta-Feira, 28 de Janeiro de 2010
Mensagens: 56
Localização: Jaraguá do Sul-SC

MensagemEnviada: Qui Set 26, 2013 1:35 pm    Assunto: Re: Função para criptografia Responder com Citação

claudio.ferreira escreveu:
Pessoal,

Preciso de uma função para criptografar a senha do banco que vai no executável. Tenho uma mas não quero usá-la pois muito simples e fácil de quebrar, preciso de uma mais forte..

Voces tem alguma ?

Grato.

Código:
function Crypt(Action, Src, Key : String) : String;
var
     KeyLen    : Integer;
     KeyPos    : Integer;
     offset    : Integer;
     dest      : string;
     SrcPos    : Integer;
     SrcAsc    : Integer;
     TmpSrcAsc : Integer;
     Range     : Integer;
begin
     dest:='';
     KeyLen:=Length(Key);
     KeyPos:=0;
     SrcPos:=0;
     SrcAsc:=0;
     Range:=256;
     if Action = UpperCase('E') then
     begin
          Randomize;
          offset:=Random(Range);
          dest:=format('%1.2x',[offset]);
          for SrcPos := 1 to Length(Src) do
          begin
               SrcAsc:=(Ord(Src[SrcPos]) + offset) MOD 255;
               if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
               SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
               dest:=dest + format('%1.2x',[SrcAsc]);
               offset:=SrcAsc;
          end;
     end;
     if Action = UpperCase('D') then
     begin
          offset:=StrToInt('$'+ copy(src,1,2));
          SrcPos:=3;
          repeat
                SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
                if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;
                TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
                if TmpSrcAsc <offset>= Length(Src);
     end;
     Result:=dest;
end;



Desde que vc use uma chave de segurança boa, essa sua função vai ter uma criptografia legal ex: Key:= #oP&mn&¨*%$!@$TSrrd$.

E o Random faz com que essa função gere sempre uma sequencia de caracteres diferentes, mesmo que vc mande criptografar uma mesma string duas vezes, ele vai retornar duas sequencias diferentes.
_________________
“ Imaginação é o começo da criação; nós imaginamos o que desejamos, somos o que imaginamos, e criamos o que somos. Integridade é o que fazemos, o que dizemos, e o que dizemos que fazemos.”
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Qui Set 26, 2013 2:30 pm    Assunto: Responder com Citação

Realmente é uma boa idéia AllanRM, usá-la 2 vezes, farei isso, obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
emanoelts
Novato
Novato


Registrado: Sexta-Feira, 6 de Novembro de 2009
Mensagens: 82

MensagemEnviada: Sex Set 27, 2013 11:42 am    Assunto: Responder com Citação

Segue um exemplo para criptografia com md5:

(Declare a unit IdHashMessageDigest na cláusula uses onde for usar)

procedure TForm1.Button1Click(Sender: TObject);
begin
if Trim(Edit1.Text) = '' then
begin
Exit;
end;
Edit2.Text := MD5String(Edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if Trim(Edit3.Text) = '' then
begin
Exit;
end;
if MD5String(Trim(Edit3.Text)) = Edit2.Text then
Application.MessageBox('Senha Válida', 'Senha Válida', MB_OK +
MB_ICONINFORMATION)
else
Application.MessageBox('Senha Inválida', 'Senha Inválida', MB_OK +
MB_ICONSTOP);
end;

function TForm1.MD5String(const texto: string): string;
var
idmd5: TIdHashMessageDigest5;
begin
idmd5 := TIdHashMessageDigest5.Create;
try
result := LowerCase(idmd5.HashStringAsHex(texto));
finally
idmd5.Free;
end;
end;

Lembrando que o md5 só criptografa não faz a decriptografia, portanto deve-se criptografar a senha e guardar no Banco de Dados e quando for comparar, criptografa a senha digitada e compara com o que tem no BD.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Sex Set 27, 2013 11:47 am    Assunto: Responder com Citação

emanoelts,

agradeço sua resposta, conheço o MD5 mas preciso descriptografar por isso ele não me serve. Achei um componente DCPCrypto2 com vários algoritmos com criptografia forte e pretendo usá-lo

http://www.cityinthesky.co.uk/opensource/DCPcrypt

Grato,
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB