Genera un hash de php

Generador

Hash generado

Copiar

Código PHP ejecutado

Tiempo de ejecución:



¿Qué es un Hash en PHP?

Un hash es una función criptográfica que convierte datos de entrada (como contraseñas) en una cadena de longitud fija que parece aleatoria. PHP ofrece funciones modernas de hashing especialmente diseñadas para el almacenamiento seguro de contraseñas que incluyen:

Tipos de Hash Disponibles

Comparativa entre algoritmos de encriptación: PASSWORD_DEFAULT vs PASSWORD_BCRYPT

 

PASSWORD_DEFAULT

Es el algoritmo recomendado para hash de contraseñas. Actualmente utiliza bcrypt (Blowfish), pero PHP podría cambiar esto en el futuro a algoritmos más fuertes. Al usar PASSWORD_DEFAULT, tu aplicación utilizará automáticamente el algoritmo más fuerte disponible en cada versión de PHP.

PASSWORD_BCRYPT

Implementa el algoritmo CRYPT_BLOWFISH para crear un hash Blowfish. Este algoritmo producirá un hash de 60 caracteres y siempre será compatible con la función password_verify(), incluso si cambia el valor de PASSWORD_DEFAULT en futuras versiones de PHP.

¿Qué significa el parámetro "Costo"?

El costo es un parámetro clave en funciones de hash modernas que determina cuánto trabajo computacional se requiere para generar el hash. Un valor más alto proporciona mayor seguridad pero requiere más recursos.

Gráfica de consumo de recursos según el factor de costo en password_hash

El rango permitido es de 4 a 31, donde:

  • 4-8: Valores bajos, útiles para pruebas o sistemas con recursos muy limitados
  • 10-12: Valores recomendados para la mayoría de aplicaciones web
  • 14+: Valores altos para datos extremadamente sensibles, pero con impacto significativo en rendimiento

Nota: En este servicio, el costo máximo está limitado a 15 para evitar sobrecarga del servidor.

Simulador de tiempo de procesamiento

Factor de Costo:
4 (Mínimo) 10 (Recomendado) 15 (Máximo)
¡Completado en !

¿Por qué importa el tiempo? Un algoritmo que toma más tiempo para calcular un hash también hace que los ataques de fuerza bruta sean mucho más lentos y costosos.

Nota: Esta simulación muestra una aproximación y el tiempo real puede variar según el hardware.


¿Por qué usar estas funciones en lugar de md5 o sha1?

Las funciones antiguas como md5() o sha1() tienen serias debilidades para almacenar contraseñas y ya no deben utilizarse para este propósito. Aquí explicamos por qué las modernas funciones password_hash() y password_verify() son superiores.

Problemas con funciones antiguas

  • Son extremadamente rápidas (lo que favorece a los atacantes)
  • No incluyen "sal" automáticamente
  • Son vulnerables a ataques con tablas rainbow y de fuerza bruta
  • Generan siempre el mismo hash para la misma entrada
  • Sin factor de costo ajustable

Ventajas de password_hash()

  • Generan un hash diferente cada vez (sal única)
  • Son deliberadamente lentas para dificultar ataques
  • Factor de costo configurable según necesidades
  • Se pueden verificar fácilmente con password_verify()
  • Se actualizan automáticamente a algoritmos más seguros

¿Cómo utilizar el hash generado?

La implementación adecuada del hashing en PHP requiere dos pasos principales: generar el hash al registrar usuarios y verificarlo al iniciar sesión. Aquí tienes un ejemplo completo:


// 1. Al registrar un usuario
$password = $_POST['password']; // Contraseña del formulario
$cost = 10; // Factor de costo recomendado

// Generar el hash
$hashed_password = password_hash($password, PASSWORD_DEFAULT, ['cost' => $cost]);

// Guardar $hashed_password en la base de datos
$sql = "INSERT INTO users (username, password) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $username, $hashed_password);
$stmt->execute();


// 2. Al iniciar sesión
$input_password = $_POST['password']; // Contraseña ingresada
$stored_hash = $row['password']; // Hash recuperado de la base de datos

if (password_verify($input_password, $stored_hash)) {
    // Contraseña correcta, iniciar sesión
    session_start();
    $_SESSION['user_id'] = $user_id;
    // Redirigir a área de miembros
} else {
    // Contraseña incorrecta
    $error = "Usuario o contraseña incorrectos";
}

Consideraciones de Seguridad

El hashing de contraseñas es solo un componente de una estrategia de seguridad completa. Considera las siguientes prácticas adicionales:

Buenas prácticas de seguridad
  • Nunca almacenes contraseñas en texto plano, incluso temporalmente
  • Utiliza siempre conexiones HTTPS para transmitir credenciales
  • Implementa límites de intentos fallidos para prevenir ataques de fuerza bruta
  • Considera la autenticación de dos factores para mayor seguridad
  • Actualiza los hashes periódicamente usando password_needs_rehash()
  • No crees tu propio sistema de hashing; confía en las funciones nativas probadas
  • Mantén tu servidor y PHP actualizados a las últimas versiones estables

Actualización de hashes: Si utilizas PASSWORD_DEFAULT, es recomendable verificar periódicamente si los hashes necesitan actualizarse cuando el usuario inicia sesión:


if (password_needs_rehash($stored_hash, PASSWORD_DEFAULT, ['cost' => $cost])) {
$new_hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => $cost]);
// Actualizar el hash en la base de datos
}

Recursos Adicionales

Para profundizar tus conocimientos sobre hashing y seguridad en PHP, recomendamos estos recursos:

Acerca de esta herramienta

Esta es una herramienta y documento generado por el equipo de Polilla Studio con el objetivo de documentar y enseñar el uso de PHP Hash. No se almacena ningún dato usado en la herramienta de generación de hash y solo se obtienen métricas de uso mediante el uso de Google Analytics

Tecnologías usadas en esta herramienta


¿Buscas un equipo para tu próximo proyecto?

En Polilla Studio somos especialistas en desarrollo web seguro, aplicaciones PHP y soluciones de comercio electrónico. Nuestro equipo puede ayudarte a:

¡Contáctanos!

¿Tienes un proyecto en mente o necesitas asesoría técnica? Nuestro equipo está listo para ayudarte.

Solicitar información