Skip to content

Encriptar passwords en Delphi

Mejores Prácticas de Seguridad

La seguridad de los datos, específicamente los paswords, son una preocupación crítica para desarrolladores y usuarios por igual.

Como ya sabemos, Delphi es un lenguaje de programación ampliamente utilizado para el desarrollo de aplicaciones rápidas y eficientes, y hoy te enseñamos las mejores prácticas para encriptar contraseñas en Delphi.

La Importancia de Encriptar los Passwords

Las contraseñas sin encriptar son vulnerables a ataques cibernéticos, como el robo de identidad y la intrusión no autorizada, no importa el tamaño de la aplicación.

Al encriptar los passwords, incluso si una base de datos es comprometida, las contraseñas seguirán siendo ilegibles para los atacantes.

Hashing en Delphi

Una de las técnicas que utilizamos la mayoría de los desarrolladores para encriptar contraseñas es el hashing.

En Delphi, se pueden utilizar algoritmos de hashing como MD5, SHA-1, o preferiblemente (que yo utilizo), SHA-256, que son más seguros debido a su capacidad para producir una cadena de caracteres única y larga a partir de una entrada dada.

Ejemplo simple de cómo encriptar utilizando SHA-256 en Delphi

uses
  System.Hash;

function HashSha256(const APassword: string): string;
var
  SHA256: THashSHA2;
begin
  SHA256 := THashSHA2.Create;
  try
    Result := SHA256.GetHashString(APassword);
  finally
    SHA256.Free;
  end;
end;

Encriptaciones más seguras con Salt

Incluso si utilizando los métodos de hashing, las contraseñas siguen siendo vulnerables a ataques con métodos de diccionarios o tablas arcoíris.

Para proteger aún más ñas contraseñas, es recomendable agregar una “salt” a la contraseña antes de encriptarla.

La salt es un valor único que se concatena con el password antes de encriptarlo. Esto dificulta la posibilidad de precalcular tablas arcoíris y aumenta la seguridad general.

Ejemplo de Password + Salt

uses
  System.Hash;

function HashPasswordWithSalt(const APassword, ASalt: string): string;
var
  SHA256: THashSHA2;
begin
  SHA256 := THashSHA2.Create;
  try
    Result := SHA256.GetHashString(APassword + ASalt);
  finally
    SHA256.Free;
  end;
end;