sha1()
Artículo sobre la función PHP sha1(), usada para calcular el hash SHA-1 de una cadena, útil para generar identificadores únicos y huellas digitales.
La función PHP sha1() calcula el hash SHA-1 de una cadena. SHA-1 ("Secure Hash Algorithm 1") toma una entrada de cualquier longitud y produce un resumen fijo de 160 bits — una huella hexadecimal de 40 caracteres. La misma entrada siempre produce el mismo hash, pero no es posible revertir el hash para obtener la cadena original.
Esta página cubre la sintaxis de sha1(), sus dos parámetros, el formato de salida, casos de uso prácticos y — de forma importante — cuándo no deberías usarla.
Sintaxis
sha1(string $string, bool $binary = false): stringLa función acepta dos parámetros:
| Parámetro | Requerido | Descripción |
|---|---|---|
$string | Sí | La cadena de entrada que se va a hashear. |
$binary | No | Si es true, devuelve 20 bytes binarios en bruto. Si es false (valor por defecto), devuelve una cadena hexadecimal de 40 caracteres. |
Devuelve el resumen SHA-1 de $string como una cadena.
Ejemplo básico
Ejemplo de PHP sha1()
En este ejemplo, tenemos una variable de cadena $string que queremos hashear. Usamos la función sha1() para calcular el hash SHA-1 de la cadena.
La salida de este código será:
2ef7bde608ce5404e97d5f042f95f89f1c232871Sin importar la longitud de la entrada, la salida hexadecimal siempre tiene exactamente 40 caracteres. Una cadena vacía igualmente devuelve un hash válido (da39a3ee5e6b4b0d3255bfef95601890afd80709).
Salida hexadecimal vs. binaria en bruto
Por defecto, sha1() devuelve el resumen como texto hexadecimal legible. Establece el segundo parámetro en true para obtener los 20 bytes binarios en bruto — la mitad del tamaño, lo cual es útil cuando almacenas el hash en una columna de base de datos compacta BINARY(20) en lugar de un campo de texto de 40 caracteres.
Ejemplo con el parámetro $binary
<?php
$string = 'Hello World!';
echo strlen(sha1($string)); // 40 (hexadecimal string)
echo "\n";
echo strlen(sha1($string, true)); // 20 (raw binary bytes)
?>40
20Las dos formas contienen la misma información; bin2hex(sha1($string, true)) produce exactamente el mismo valor que sha1($string).
Cuándo usar sha1()
SHA-1 sigue siendo aceptable para tareas sin implicaciones de seguridad donde solo necesitas una huella rápida y determinista:
- Claves de caché — convierte una URL larga o una consulta en una clave corta de longitud fija.
- Detección de cambios — compara el hash de un valor ahora con el de después para ver si cambió, sin almacenar el valor completo.
- Deduplicación — agrupa contenido idéntico por su resumen.
Para hashear el contenido de un archivo en lugar de una cadena, usa sha1_file(). La función de propósito general hash() de PHP también permite elegir algoritmos más fuertes como sha256.
Cuándo no usar sha1()
SHA-1 es una función hash criptográfica, no un método de cifrado — no existe forma de "descifrarla" para obtener el original. Más importante aún, SHA-1 está criptográficamente rota: existen ataques de colisión prácticos, por lo que no debe usarse en contextos donde la seguridad dependa del hash.
No uses sha1() para:
- Almacenamiento de contraseñas. Usa
crypt()/password_hash()de PHP con bcrypt o Argon2, que añaden salting y un factor de costo deliberadamente lento. - Firmas digitales o verificaciones de integridad que un atacante pueda intentar falsificar — prefiere SHA-256 o superior mediante
hash('sha256', $data).
La función relacionada md5() comparte las mismas debilidades y la misma regla: válida para huellas digitales, insegura para seguridad.
Resumen
La función sha1() es una herramienta directa para generar valores hash de longitud fija en PHP. Al comprender su salida hexadecimal de 40 caracteres, la opción binaria en bruto y sus limitaciones de seguridad, puedes usarla con confianza para huellas digitales, mientras recurres a password_hash() o SHA-256 cuando la seguridad real está en juego.