piapia123
es

Hashes de contraseña de PostgreSQL / MySQL / MariaDB

Cifrado

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

Calcula qué se guarda realmente en el campo de contraseña de tres bases de datos. Ninguno de estos esquemas debería usarse hoy en sistemas nuevos — el md5 de PostgreSQL hace un único md5 sin iteraciones, y el `PASSWORD()` de MySQL se eliminó y su doble SHA-1 lleva mucho tiempo obsoleto —, pero siguen presentes en incontables filas de `pg_authid` y `mysql.user` y en scripts de puesta en marcha por todas partes. Para migrar un usuario de una base a otra, o reparar un registro a mano, hay que poder calcular ese valor. El caso de PostgreSQL merece especial atención: usa el nombre de usuario como sal (hash = md5(contraseña + usuario)), así que la misma contraseña con otro usuario da un hash completamente distinto — si copias ese hash bajo otro nombre, el inicio de sesión fallará sin más.

Funciones

  • Tres dialectos: el md5 de PostgreSQL y mysql_native_password en MySQL y MariaDB
  • PostgreSQL calcula sobre «contraseña + usuario» — y explica por qué el usuario importa
  • Cada dialecto trae una sentencia SQL lista para ejecutar (ALTER USER / SET PASSWORD)
  • El hash y el SQL van en filas separadas, cada una con su propio botón de copiar
  • Las contraseñas no ASCII se tratan como bytes UTF-8
  • Todo se calcula en local; la contraseña no se sube

Cómo se usa

  1. Elige la base de datos
  2. En PostgreSQL hay que indicar además el usuario (se usa como sal)
  3. Pega la contraseña en la caja de entrada
  4. Copia el hash, o esa línea de SQL

Preguntas frecuentes

¿Por qué PostgreSQL necesita el usuario?
Porque su esquema `md5` usa el nombre de usuario como sal: `md5` + md5(contraseña + usuario). La ventaja es no necesitar una columna aparte para la sal; el precio es que renombrar el rol invalida la contraseña: mueve el hash bajo otro nombre y el md5 interno seguirá llevando el antiguo, de modo que el inicio de sesión fallará. Es la trampa más habitual al migrar usuarios, y por eso esta herramienta lo dice en la propia página.
MySQL eliminó PASSWORD(); ¿esto todavía sirve?
MySQL 8.0 eliminó la función `PASSWORD()`, pero el plugin `mysql_native_password` sigue existiendo (solo dejó de ser el predeterminado, que ahora es `caching_sha2_password`). Esta herramienta calcula exactamente lo que espera ese plugin: un asterisco seguido del hexadecimal en mayúsculas de un doble SHA-1. Para asignarlo a un usuario de MySQL 8.0, usa `IDENTIFIED WITH mysql_native_password AS '…'`, que es precisamente el SQL que te da esta herramienta.
¿Son seguros estos esquemas?
No, y ninguno debería estar en nada nuevo. El md5 de PostgreSQL hace un solo md5 sin iteraciones, y una GPU moderna calcula miles de millones por segundo. El doble SHA-1 de MySQL añade una capa, pero está lejos de la fuerza de un hash deliberadamente lento. El problema de fondo es que ninguno pone sal de verdad (la «sal» de PostgreSQL es el nombre de usuario: público y fijo), así que las tablas arcoíris funcionan directamente. Para sistemas nuevos usa bcrypt, scrypt o Argon2id — los tres tienen herramienta en este sitio —. La razón de ser de esta es la migración, no el trabajo nuevo.

Herramientas relacionadas