Generador de Hash SHA-1
Genera hash SHA-1 de cualquier texto
Texto de entrada
Hash SHA-1
El hash SHA-1 aparecerá aquí…
¿Qué es el hashing SHA-1?
SHA-1 (Secure Hash Algorithm 1) es una función hash criptográfica que produce un resumen fijo de 160 bits (20 bytes) a partir de cualquier entrada. Publicada por la NSA y estandarizada por NIST en 1995 como FIPS PUB 180-1 y documentada posteriormente en RFC 3174, SHA-1 fue diseñada como sucesora más robusta de SHA-0 y MD5. El algoritmo procesa la entrada en bloques de 512 bits a través de 80 rondas de operaciones bit a bit, produciendo una huella hexadecimal de 40 caracteres que sirvió de base para SSL/TLS, PGP, SSH e IPsec durante más de una década.
Como todas las funciones hash criptográficas, SHA-1 es una transformación unidireccional: calcular el hash a partir de una entrada es rápido, pero recuperar la entrada solo a partir del hash es computacionalmente inviable. Un cambio de un solo bit en la entrada produce un resumen de 160 bits completamente diferente — una propiedad conocida como efecto avalancha. SHA-1 mapea un espacio de entrada arbitrariamente grande a una salida fija de 160 bits, lo que significa que las colisiones (dos entradas distintas que producen el mismo hash) deben existir matemáticamente. La afirmación de seguridad de una función hash es que encontrar esas colisiones debería requerir aproximadamente 2^80 operaciones — la mitad de la longitud en bits de la salida.
En 2017, Google y CWI Ámsterdam publicaron el ataque SHAttered, demostrando la primera colisión práctica de SHA-1 al producir dos archivos PDF distintos con el mismo resumen. El ataque requirió aproximadamente 2^63.1 cómputos SHA-1 — muy por debajo del límite teórico de 2^80. En 2020, Gaetan Leurent y Thomas Peyrin redujeron aún más el coste con un ataque de colisión de prefijo elegido que requería aproximadamente 2^63.4 operaciones. Como resultado, todos los navegadores principales, autoridades de certificación y organismos de estándares han descontinuado SHA-1 para firmas digitales y certificados TLS. Sin embargo, SHA-1 sigue en uso activo para fines no relacionados con la seguridad: identificadores de objetos de Git (aunque Git está migrando a SHA-256), construcciones HMAC heredadas y sumas de verificación de integridad de archivos donde no se requiere resistencia a colisiones adversariales.
¿Por qué usar este generador SHA-1?
Genera hashes SHA-1 al instante sin instalar nada ni escribir código. Pega tu texto y obtén el resumen hexadecimal de 40 caracteres en tiempo real — útil para verificar sumas de verificación heredadas, depurar las entrañas de Git o probar flujos de trabajo basados en hash.
Casos de uso de SHA-1
SHA-1 frente a otros algoritmos hash
SHA-1 produce un resumen de 160 bits — más largo que MD5 (128 bits) pero significativamente más corto que los algoritmos de la familia SHA-2. La tabla siguiente compara tamaños de resumen, estándares y casos de uso adecuados para cada algoritmo.
| Algoritmo | Tamaño del resumen | Longitud hex | Estándar | Mejor para |
|---|---|---|---|---|
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Deprecated — legacy git commits, old TLS |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums only — broken since 2004 |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, alternative to SHA-2 |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
Cómo funciona SHA-1
SHA-1 sigue la construcción Merkle-Damgard: el mensaje se rellena, se divide en bloques de 512 bits y cada bloque se procesa a través de 80 rondas de operaciones bit a bit que mezclan la entrada con una programación de mensajes derivada del bloque. Cinco palabras de estado de 32 bits (H0 a H4) mantienen el estado hash en ejecución, y la concatenación final de estas palabras produce el resumen de 160 bits.
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
| Paso | Descripción |
|---|---|
| Padding | Append a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Expansion | Expand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule. |
| Compression | Process 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79. |
| Output | Concatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters. |
La diferencia clave entre SHA-1 y MD5 es el número de palabras de estado (5 frente a 4), el número de rondas por bloque (80 frente a 64) y el uso de una programación de mensajes con retroalimentación de rotación a la izquierda. Estas diferencias dan a SHA-1 una salida mayor (160 frente a 128 bits) y originalmente proporcionaban un margen de seguridad más elevado, aunque ambos algoritmos se consideran ahora vulnerables para la resistencia a colisiones.
Ejemplos de código
Cómo generar hashes SHA-1 en lenguajes y entornos populares. A diferencia de MD5, SHA-1 está disponible en la Web Crypto API del navegador, lo que permite usarlo sin librerías externas tanto en el navegador como en entornos Node.js.
// SHA-1 is available in the Web Crypto API
async function sha1(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-1', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha1('hello world')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha1').update('hello world').digest('hex')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"import hashlib
# Basic SHA-1 hash
result = hashlib.sha1(b'hello world').hexdigest()
print(result) # → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a string (encode to bytes first)
text = 'hello world'
hashlib.sha1(text.encode('utf-8')).hexdigest()
# → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a file in chunks
with open('file.bin', 'rb') as f:
sha1 = hashlib.sha1()
for chunk in iter(lambda: f.read(8192), b''):
sha1.update(chunk)
print(sha1.hexdigest())package main
import (
"crypto/sha1"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha1.Sum(data)
fmt.Printf("%x\n", hash)
// → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}# Using sha1sum (Linux) or shasum (macOS) echo -n "hello world" | sha1sum # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # macOS echo -n "hello world" | shasum -a 1 # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # Hash a file sha1sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl sha1 # → SHA1(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed