Crypt y DES son cifrados antiguos y no deben usarse
Plain old DES es un algoritmo obsoleto. Realmente no puede compararlo de manera útil con AES128; es como quejarse de que un hash SHA256 es más grande que un hash MD5; sí, lo es, pero solo uno de ellos podría ralentizar al atacante durante un tiempo. DES era ampliamente considerado débil incluso en 1999 y nunca debe usarse en aplicaciones nuevas. No lo use.
No creo que sea una buena idea buscar un método de cifrado que "brinde el tamaño de datos más pequeño posible", porque básicamente es una pérdida de tiempo cifrar datos usando DES. ¿Por qué no usar ROT13 (cifrado César)? El resultado "cifrado" tiene el mismo tamaño que la entrada, lástima que un niño de 3 años pueda romper el cifrado.
cripta es de una añada similar. El antiguo algoritmo criptográfico hash de UNIX es... anciano... y totalmente inadecuado para cualquier aplicación nueva. Los hashes deberían ser SHA256 como mínimo, de verdad.
Crypt es un hash unidireccional
En cuanto a no poder descifrar cómo descifrar datos encriptados:crypt no es un algoritmo de encriptación, es una función hash criptográfica o "hachís unidireccional". Los hashes de una forma son adecuados para verificar que los datos no están modificados, en comparación con un salted hash para autenticación de contraseña, para usar en autenticación de desafío-respuesta , etc. No puede descifrar datos encriptados.
Lidiar con el tamaño
Use una función criptográfica decente y viva con el aumento de tamaño. bf
o aes128
son los más débiles que razonablemente puede usar.
Personalmente, prefiero cifrar/descifrar en la aplicación, no en la base de datos. Si se hace en la base de datos, las claves pueden ser reveladas por pg_stat_statements
, en los registros por log_statement
o errores, etc. Mejor que la clave nunca esté en el mismo lugar que los datos almacenados.
La mayoría de los lenguajes de programación tienen buenas rutinas criptográficas que puede usar.
Es difícil ofrecer más consejos ya que realmente no ha explicado qué está cifrando, por qué, cuáles son sus requisitos, cuáles son las amenazas, etc.
¿Contraseñas?
Si está almacenando contraseñas, probablemente lo esté haciendo mal.
-
Si es posible, permita que otra persona realice la autenticación:
-
OAuth u OpenID para Internet
-
SSPI, Kerberos/GSSAPI, Active Directory, enlace LDAP, SASL, HTTP DIGEST, etc. para intranet
-
-
Si realmente debe realizar la autenticación usted mismo, agregue sal a las contraseñas y haga un hash del resultado. Guarda el hachís y la sal. Cuando deba comparar contraseñas, sal el nuevo texto sin formato del usuario con la misma sal que usó para el hash almacenado, haga un hash de la nueva contraseña + sal y vea si el hash es el mismo que almacenó. Si es así, dieron la contraseña correcta.
-
Es casi seguro que no necesita recuperar contraseñas de texto claro. Implemente un restablecimiento seguro de contraseña en su lugar. Si realmente debe hacerlo, use un algoritmo decentemente seguro como aes para encriptarlos y piense detenidamente en el almacenamiento y la administración de claves. Vea otras publicaciones en SO sobre almacenamiento/administración de claves con pgcrypto.
Véase también: