Una herramienta segura para generar hashes criptográficos utilizando las funciones nativas de PHP. Ideal para desarrolladores que necesitan implementar almacenamiento seguro de contraseñas en sus aplicaciones web y aprender sobre las mejores prácticas de seguridad.
Tiempo de ejecución:
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:
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.
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.
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.
El rango permitido es de 4 a 31, donde:
Nota: En este servicio, el costo máximo está limitado a 15 para evitar sobrecarga del servidor.
¿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.
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.
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";
}
El hashing de contraseñas es solo un componente de una estrategia de seguridad completa. Considera las siguientes prácticas adicionales:
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
}
Para profundizar tus conocimientos sobre hashing y seguridad en PHP, recomendamos estos recursos:
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
En Polilla Studio somos especialistas en desarrollo web seguro, aplicaciones PHP y soluciones de comercio electrónico. Nuestro equipo puede ayudarte a:
¿Tienes un proyecto en mente o necesitas asesoría técnica? Nuestro equipo está listo para ayudarte.
Solicitar información