W3docs

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): string

La función acepta dos parámetros:

ParámetroRequeridoDescripción
$stringLa cadena de entrada que se va a hashear.
$binaryNoSi 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()

php— editable, runs on the server

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á:

2ef7bde608ce5404e97d5f042f95f89f1c232871

Sin 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
20

Las 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.

Práctica

Práctica
¿Cuál es el propósito de la función sha1() en PHP?
¿Cuál es el propósito de la función sha1() en PHP?
Was this page helpful?