Generatore Hash SHA-1

Genera hash SHA-1 da qualsiasi testo

Testo di input

Esegue in locale · Sicuro per incollare segreti

Hash SHA-1

L'hash SHA-1 apparirà qui…

Cos'è l'hashing SHA-1?

SHA-1 (Secure Hash Algorithm 1) è una funzione hash crittografica che produce un digest fisso di 160 bit (20 byte) da qualsiasi input. Pubblicato dalla NSA e standardizzato dal NIST nel 1995 come FIPS PUB 180-1 e successivamente documentato nell'RFC 3174, SHA-1 è stato progettato come successore più robusto di SHA-0 e MD5. L'algoritmo elabora l'input in blocchi da 512 bit attraverso 80 cicli di operazioni bit a bit, producendo un'impronta esadecimale di 40 caratteri che per oltre un decennio ha costituito la base di SSL/TLS, PGP, SSH e IPsec.

Come tutte le funzioni hash crittografiche, SHA-1 è una trasformazione unidirezionale: calcolare l'hash a partire da un input è rapido, ma risalire all'input dal solo hash è computazionalmente impossibile. Un cambiamento di un singolo bit nell'input produce un digest di 160 bit completamente diverso — una proprietà chiamata effetto valanga. SHA-1 mappa uno spazio di input arbitrariamente grande in un output fisso di 160 bit, il che significa che le collisioni (due input diversi che producono lo stesso hash) devono esistere matematicamente. La garanzia di sicurezza di una funzione hash è che trovare tali collisioni dovrebbe richiedere circa 2^80 operazioni — la metà della lunghezza in bit dell'output.

Nel 2017, Google e CWI Amsterdam hanno pubblicato l'attacco SHAttered, dimostrando la prima collisione SHA-1 pratica producendo due file PDF diversi con lo stesso digest. L'attacco ha richiesto circa 2^63.1 computazioni SHA-1 — ben al di sotto del limite teorico di 2^80. Nel 2020, Gaetan Leurent e Thomas Peyrin hanno ulteriormente ridotto il costo con un attacco a collisione a prefisso scelto richiedente circa 2^63.4 operazioni. Di conseguenza, tutti i principali browser, le autorità di certificazione e gli organismi di standardizzazione hanno deprecato SHA-1 per firme digitali e certificati TLS. Tuttavia, SHA-1 rimane in uso attivo per scopi non legati alla sicurezza: ID degli oggetti Git (anche se Git sta migrando a SHA-256), costruzioni HMAC legacy e checksum di integrità dei file dove la resistenza alle collisioni avversariali non è richiesta.

Perché usare questo generatore SHA-1?

Genera hash SHA-1 all'istante senza installare nulla né scrivere codice. Incolla il tuo testo e ottieni il digest esadecimale di 40 caratteri in tempo reale — utile per verificare checksum legacy, fare debug degli internals di Git o testare flussi di lavoro basati sugli hash.

Hashing istantaneo
L'output si aggiorna mentre digiti. Nessun clic su pulsanti, nessuna attesa — il digest SHA-1 appare carattere per carattere mentre modifichi l'input.
🔒
Elaborazione privacy-first
Tutto l'hashing viene eseguito localmente nel tuo browser tramite la Web Crypto API. Il tuo testo di input non lascia mai il dispositivo e non viene mai inviato ad alcun server.
📋
Copia con un clic
Copia l'hash negli appunti con un solo clic. Alterna tra output esadecimale in minuscolo e maiuscolo per adattarti al formato atteso dal tuo sistema.
🔍
Nessun account richiesto
Nessuna registrazione, nessun accesso, nessun limite di utilizzo. Apri la pagina e inizia subito a generare hash. Funziona su qualsiasi dispositivo con un browser moderno.

Casi d'uso di SHA-1

Internals di Git e debugging
Git identifica ogni oggetto (commit, tree, blob, tag) tramite il suo hash SHA-1. Durante il debug dei comandi plumbing di Git, la verifica dei pack file o la scrittura di strumenti Git personalizzati, un generatore SHA-1 rapido aiuta a confrontare gli ID degli oggetti con i valori attesi.
Verifica di sistemi legacy
Molti sistemi più datati, registri di pacchetti e meccanismi di aggiornamento firmware pubblicano ancora checksum SHA-1 insieme ai download. Genera e confronta hash SHA-1 per verificare l'integrità dei file quando i digest SHA-256 non sono disponibili.
Subresource Integrity (SRI)
Sebbene sha256 e sha384 siano preferiti per gli hash SRI nei tag script e link HTML, alcune configurazioni CDN legacy fanno ancora affidamento su SHA-1. Genera il digest atteso per verificare o migrare gli attributi SRI esistenti.
QA e test di regressione
Confronta gli hash SHA-1 di risposte API, artefatti di build o snapshot di database tra esecuzioni di test per rilevare modifiche inattese senza eseguire un diff byte per byte completo di output di grandi dimensioni.
Deduplicazione dei dati
Calcola hash SHA-1 di contenuti di file o record di dati nelle pipeline ETL per identificare i duplicati. L'output a 160 bit offre una garanzia di unicità più forte di MD5 per scenari di deduplicazione non avversariali.
Apprendimento e formazione
SHA-1 è un algoritmo ben documentato con un'ampia letteratura accademica. Sperimentaci per comprendere la costruzione di Merkle-Damgard, la schedulazione dei messaggi e perché la resistenza alle collisioni si deteriora quando la lunghezza dell'output è troppo corta rispetto alla potenza di calcolo moderna.

SHA-1 vs altri algoritmi hash

SHA-1 produce un digest di 160 bit — più lungo di MD5 (128 bit) ma significativamente più corto degli algoritmi della famiglia SHA-2. La tabella seguente confronta le dimensioni dei digest, gli standard e i casi d'uso appropriati per ciascun algoritmo.

AlgoritmoDimensione digestLunghezza esadecimaleStandardIdeale per
SHA-1160 bits40 hex chars1995 / RFC 3174Deprecated — legacy git commits, old TLS
SHA-256256 bits64 hex chars2001 / FIPS 180-4TLS certificates, blockchain, JWTs
SHA-384384 bits96 hex chars2001 / FIPS 180-4Government systems, higher security margin
SHA-512512 bits128 hex chars2001 / FIPS 180-4Digital signatures, HMAC with large keys
MD5128 bits32 hex chars1992 / RFC 1321Checksums only — broken since 2004
SHA-3256 bits64 hex chars2015 / FIPS 202Post-quantum readiness, alternative to SHA-2
BLAKE3256 bits64 hex chars2020High-performance checksums, Merkle trees

Come funziona SHA-1

SHA-1 segue la costruzione di Merkle-Damgard: il messaggio viene aggiunto con padding, suddiviso in blocchi da 512 bit e ciascun blocco viene elaborato attraverso 80 cicli di operazioni bit a bit che mescolano l'input con una schedulazione dei messaggi derivata dal blocco. Cinque parole di stato da 32 bit (da H0 a H4) mantengono lo stato hash in esecuzione, e la concatenazione finale di queste parole produce il digest di 160 bit.

Input: "hello world"
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
PassoDescrizione
PaddingAppend a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer.
Block splittingDivide the padded message into 512-bit (64-byte) blocks.
ExpansionExpand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule.
CompressionProcess 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79.
OutputConcatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters.

La differenza chiave tra SHA-1 e MD5 è il numero di parole di stato (5 contro 4), il numero di cicli per blocco (80 contro 64) e l'uso di una schedulazione dei messaggi con feedback di rotazione a sinistra. Queste differenze danno a SHA-1 un output più grande (160 contro 128 bit) e fornivano originariamente un margine di sicurezza superiore, sebbene entrambi gli algoritmi siano ora considerati vulnerabili per la resistenza alle collisioni.

Esempi di codice

Come generare hash SHA-1 nei linguaggi e ambienti più diffusi. A differenza di MD5, SHA-1 è disponibile nella Web Crypto API del browser, rendendolo utilizzabile senza librerie esterne sia in ambiente browser che Node.js.

JavaScript (Web Crypto API — browser & 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"
Python
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())
Go
package main

import (
    "crypto/sha1"
    "fmt"
)

func main() {
    data := []byte("hello world")
    hash := sha1.Sum(data)
    fmt.Printf("%x\n", hash)
    // → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}
CLI (Linux / macOS)
# 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

Domande frequenti

SHA-1 è ancora sicuro da usare?
SHA-1 non è sicuro per applicazioni sensibili alla sicurezza. L'attacco SHAttered del 2017 ha dimostrato la generazione pratica di collisioni, e l'attacco a prefisso scelto del 2020 ha ulteriormente ridotto il costo. Per firme digitali, certificati TLS o qualsiasi scenario in cui un avversario potrebbe creare input in collisione, usa SHA-256 o SHA-3. Per scopi non legati alla sicurezza come checksum e chiavi di cache dove nessun avversario controlla l'input, SHA-1 rimane funzionale.
Qual è la differenza tra SHA-1 e SHA-256?
SHA-1 produce un digest di 160 bit (40 caratteri esadecimali) ed è vulnerabile agli attacchi di collisione. SHA-256 produce un digest di 256 bit (64 caratteri esadecimali) e appartiene alla famiglia SHA-2, che non ha attacchi pratici noti. SHA-256 è circa il 20-30% più lento di SHA-1 sullo stesso hardware, ma i 96 bit aggiuntivi di output e l'assenza di debolezze strutturali note lo rendono la scelta predefinita per qualsiasi nuovo progetto.
Perché Git usa SHA-1?
Quando Linus Torvalds ha progettato Git nel 2005, SHA-1 era considerato sicuro e offriva un buon equilibrio tra velocità e resistenza alle collisioni per l'archiviazione indirizzabile per contenuto. Git utilizza SHA-1 come identificatore di contenuto, non come meccanismo di sicurezza — rileva la corruzione accidentale, non la manomissione avversariale. Dal 2021, Git sta migrando a SHA-256 tramite il framework di estensione hash descritto nel piano git-hash-function-transition.
È possibile invertire un hash SHA-1 per ottenere l'input originale?
No. SHA-1 è una funzione unidirezionale che scarta informazioni durante l'hashing. Per input brevi o comuni, gli attaccanti possono usare rainbow table o ricerca a forza bruta per trovare il testo in chiaro originale, ma questo non è un'inversione dell'algoritmo — è una ricerca esaustiva dello spazio degli input. Per le password, usa bcrypt, scrypt o Argon2 invece di qualsiasi funzione hash veloce.
Come funziona l'attacco SHAttered?
L'attacco SHAttered sfrutta debolezze strutturali nella funzione di compressione SHA-1. Costruendo con cura due blocchi di messaggi da 512 bit diversi che producono lo stesso stato hash intermedio, gli attaccanti hanno creato due file PDF con digest SHA-1 identici ma contenuto visibile diverso. L'attacco ha richiesto circa 2^63 computazioni SHA-1 — circa 6.500 anni di tempo su una singola CPU, ma fattibile su un cluster GPU in pochi mesi. Il costo è ulteriormente sceso con tecniche migliorate.
Qual è la differenza tra SHA-1 e HMAC-SHA1?
SHA-1 è una semplice funzione hash: hash = SHA1(messaggio). HMAC-SHA1 è un codice di autenticazione dei messaggi con chiave: mac = HMAC(chiave, messaggio). HMAC avvolge la funzione hash in una costruzione che previene gli attacchi di estensione della lunghezza e richiede una chiave segreta. Curiosamente, HMAC-SHA1 rimane considerato sicuro per l'autenticazione dei messaggi anche se SHA-1 stesso è vulnerabile alla resistenza alle collisioni, perché la sicurezza di HMAC dipende dalle proprietà di funzione pseudocasuale della funzione di compressione, non dalla resistenza alle collisioni.
Dovrei usare SHA-1 o MD5 per i checksum dei file?
SHA-1 è una scelta migliore di MD5 per i checksum dei file. MD5 produce un digest di 128 bit ed è stato violato dal 2004, con attacchi di collisione pratici ora eseguibili in pochi secondi. SHA-1 produce un digest di 160 bit e i suoi attacchi di collisione, sebbene dimostrati, rimangono più costosi. Tuttavia, per qualsiasi nuovo sistema, preferisci SHA-256 — fornisce un digest di 256 bit senza attacchi pratici noti ed è ben supportato su tutte le piattaforme e i linguaggi.