Luego de de esta larga búsqueda de información resolvimos este atasco que suelen tener ciertos los lectores. Te regalamos la respuesta y esperamos resultarte de mucha ayuda.
Solución:
Jeff tiene un buen artículo titulado Probablemente estés almacenando contraseñas incorrectamente. Este artículo analiza varias formas de almacenar contraseñas en bases de datos y algunas de las trampas comunes con las que puede encontrarse. En particular, analiza el uso de algoritmos hash, tablas arcoíris y el uso de “sal” para reducir el riesgo de un archivo de contraseña comprometido.
el uso de la varchar
El tipo de datos es perfectamente adecuado para almacenar una contraseña correctamente cifrada. Por ejemplo, aquí hay parte de mi registro de cuenta real de una base de datos de producción:
=> select account_id, email, salt, passhash from account where email = '[email protected]'; account_id | email | salt | passhash ------------+------------------+------------------+------------------------------------------ 1 | [email protected] | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043 (1 row)
En este caso, passhash
es la representación hexadecimal del SHA-1 de la sal concatenada con mi contraseña.
Instalar “módulo chkpass”
Este módulo implementa un tipo de datos chkpass que está diseñado para almacenar contraseñas cifradas. Debe instalar el paquete de contribución postgresql y ejecutar el comando CREAR EXTENSIÓN para instalarlo.
En Ubuntu 12.04 sería así:
sudo apt-get install postgresql-contrib
Reinicie el servidor postgresql:
sudo /etc/init.d/postgresql restart
Todas las extensiones disponibles están en:
/opt/PostgreSQL/9.5/share/postgresql/extension/
Ahora puede ejecutar el comando CREAR EXTENSIÓN.
Ejemplo:
CREATE EXTENSION chkpass;
CREATE TABLE accounts (username varchar(100), password chkpass);
INSERT INTO accounts(username, "password") VALUES ('user1', 'pass1');
INSERT INTO accounts(username, "password") VALUES ('user2', 'pass2');
select * from accounts where password='pass2';
Devoluciones
username | password
---------------------------
"user2" | ":Sy8pO3795PW/k"
Postgres versión 9.4+ puede hacer esto de una manera más inteligente y segura usando la extensión pgcrypto como se explica en: http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html
Si te ha resultado de utilidad nuestro artículo, te agradeceríamos que lo compartas con el resto programadores de esta manera contrubuyes a extender este contenido.