Outro dia precisei gerar uma senha criptografada para meu sistema. Como já precisei gerar senha para o CMS Joomla! uma vez, resolvi utilizar o mesmo processo.

Os passos para a geração de uma senha no padrão Joomla! são:

  1. Gerar uma senha a sua escolha;
  2. Gerar um valor randômico de 32 caracteres;
  3. Concatenar 1 e 2.
  4. Gerar uma MD5 (3);
  5. Armazenar a senha gerada no banco de dados no formato 4:2.

No PHP, seria algo parecido com isto:

// Digite a senha desejada
$senha = 'password';

// Digite uma sequencia qualquer (será utilizar para gerar o sal)
$salt = 'sal de exemplo';

// Gerando a senha criptografada
$salt = md5($sal);
$senha_hash = md5($senha.$sal).':'.$sal;

// Mostrando a senha criptografada
echo $senha_hash;
?>

E no Delphi, ficou desta forma:

procedure TfrmPrincipal.Button1Click(Sender: TObject);
var
  vSenha : string;
begin
  {Processo de geração de senha:
  1. Generate a password
  2. Generate 32 random characters
  3. Concatenate 1 and 2
  4. md5(3)
  5. store 4:2      }

  //-- 1.Generate a password
  vSenha := trim(edtSenha.Text);

  //-- 2. Generate 32 random characters
  if edtSal.Text = '' then
    edtSal.Text := GeraChave(32);

  //-- 3. Concatenate 1 and 2
  vSenha := vSenha + edtSal.Text;

  //-- 4. md5(3)
  vSenha := MD5(vSenha);

  //-- 5. store 4:2
  edtSenhaHash.Text  := vSenha +':'+ edtSal.Text;
  edtQtdeCarac.Value := length(edtSenhaHash.Text);
end;


// Criptografar uma String
function TfrmPrincipal.MD5(const texto: string): string;
var
  idmd5: TIdHashMessageDigest5;
begin
  idmd5 := TIdHashMessageDigest5.Create;
  try
    result := idmd5.HashStringAsHex(texto);
  finally
    idmd5.Free;
  end;
end;



function TfrmPrincipal.GeraChave(Tamanho: integer): String;
var
  I: Integer;
  Chave: String;
const
  str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
begin
  Chave := '';
  for I := 1 to Tamanho do
    Chave := Chave + str[random(length(str)) + 1];
  Result := Chave;
end;

 

Anúncios