 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Qui Set 26, 2013 9:23 am Assunto: Função para criptografia |
|
|
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 |
|
 |
AllanRM Novato

Registrado: Quinta-Feira, 28 de Janeiro de 2010 Mensagens: 56 Localização: Jaraguá do Sul-SC
|
Enviada: Qui Set 26, 2013 1:34 pm Assunto: Re: Função para criptografia |
|
|
| 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 |
|
 |
AllanRM Novato

Registrado: Quinta-Feira, 28 de Janeiro de 2010 Mensagens: 56 Localização: Jaraguá do Sul-SC
|
Enviada: Qui Set 26, 2013 1:35 pm Assunto: Re: Função para criptografia |
|
|
| 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 |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Qui Set 26, 2013 2:30 pm Assunto: |
|
|
| Realmente é uma boa idéia AllanRM, usá-la 2 vezes, farei isso, obrigado. |
|
| Voltar ao Topo |
|
 |
emanoelts Novato

Registrado: Sexta-Feira, 6 de Novembro de 2009 Mensagens: 82
|
Enviada: Sex Set 27, 2013 11:42 am Assunto: |
|
|
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 |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Sex Set 27, 2013 11:47 am Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|