Calcolatore hash FNV-1
Calcoli l'hash di un testo nel modo originale di Fowler, Noll e Vo, moltiplicando prima di mescolare ogni byte: foobar dà 31f0b262 a 32 bit, il valore che le tabelle di riferimento riportano per FNV-1 e non per FNV-1a. Scelga 32 o 64 bit. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Testo
- foobar
- Risultato
- 31f0b262
- Fnv1
- 31f0b262
- Hex
- 31f0b262
- Bit
- 32
FNV-1 è un hash non crittografico progettato da Glenn Fowler, Landon Curt Noll e Phong Vo. Elabora ogni messaggio come una sequenza di byte e, per ogni byte, moltiplica l'hash corrente per un primo FNV fisso e poi applica lo xor del byte sul prodotto. Quell'ordine moltiplica-poi-xor distingue FNV-1 da FNV-1a, che fa prima lo xor e poi moltiplica; entrambi condividono le stesse basi di offset e primi, ma producono digest diversi per ogni stringa non vuota.
Cosa calcola FNV-1 e perché contano larghezza e lunghezza hex
FNV-1 tratta ogni messaggio come una sequenza ordinata di ottetti. Il registro dell'hash viene inizializzato con una base di offset pubblicata: esadecimale otto uno uno c nove d c cinque per trentadue bit, oppure c b f due nove c e quattro otto quattro due due due tre due cinque per sessantaquattro bit.
Per ogni byte di ingresso l'algoritmo moltiplica l'hash corrente per il primo FNV corrispondente—zero uno zero zero zero uno nove tre a trentadue bit, oppure uno zero zero zero zero zero zero zero uno b tre a sessantaquattro bit—poi applica lo xor esclusivo del byte sul prodotto, con wrapping alla larghezza di bit scelta. Una stringa di controllo ben nota è foobar: FNV-1 a trentadue bit produce tre uno f zero b due sei due, che coincide con tabelle di riferimento indipendenti per l'ordine originale moltiplica-poi-xor.
La risposta riporta anche bits, l'etichetta di algoritmo FNV-1-32 o FNV-1-64, il conteggio dei byte UTF-8 e il testo originale così i client possono mostrare una riga di audit completa senza ricalcolare i metadati. Poiché FNV-1 non è resistente alle collisioni, non è a chiave e non è adatto a password o firme, lo si tratti come un identificatore di contenuto rapido o un seme di tabella hash—non come prova di autenticità.
Preferisca digest della famiglia SHA quando l'intento di ricerca è l'hash crittografico piuttosto che un hash non crittografico Fowler–Noll–Vo.
A cosa serve un hash FNV-1
Autori di runtime di linguaggi e studenti di sistemi usano un calcolatore di hash FNV-1 per verificare a mano i passi moltiplica-poi-xor rispetto alle basi di offset e ai primi pubblicati senza scrivere un ciclo di moltiplicazione modulare in ogni linguaggio. Le piattaforme didattiche e i plugin LMS necessitano di un oracolo deterministico che rifiuti l'input vuoto invece di restituire la sola base di offset, così gli auto-correttori distinguono risposte mancanti da un digest reale.
I siti di contenuti che si posizionano su hash FNV-1 o calcolatore FNV1 traggono vantaggio da uno strumento live il cui percorso gratuito coincide byte per byte con l'automazione a pagamento sullo stesso modulo puro. I fallimenti di validazione non consumano mai il saldo dopo il rifiuto. Abbini landing di FNV-1a, Adler-32, CRC o hash crittografico solo quando l'intento di ricerca si allontana dall'FNV-1 originale—tenga questa pagina incentrata su FNV-1 affinché l'intento SEO resti nitido e non cannibalizzi landing di checksum o digest correlate.
Casi d'uso
Semi per tabelle hash e filtri di Bloom
Generi chiavi hex stabili FNV-1-32 o FNV-1-64 per stringhe brevi usate come bucket di map, filtri di Bloom o semi di feature flag tra linguaggi.
Dimostrazioni in aula del FNV moltiplica-poi-xor
I docenti mostrano il valore di controllo classico di foobar e lasciano ricalcolare agli studenti altre stringhe brevi senza installare una libreria crittografica.
Domande frequenti
Qual è la differenza tra FNV-1 e FNV-1a?
FNV-1 moltiplica prima per il primo FNV, poi applica lo xor del byte. FNV-1a fa prima lo xor, poi moltiplica. Questo strumento implementa solo FNV-1; i digest non coincideranno con le tabelle FNV-1a.
Cosa succede se il testo è vuoto?
È richiesta una stringa non vuota; l'input vuoto non è trattato come un hash riuscito della sola base di offset.
Il calcolatore di hash FNV-1 è gratuito?
Lo strumento del browser viene eseguito gratis sul Suo dispositivo.
FNV-1 è un hash crittografico?
No. FNV-1 è un hash non crittografico veloce per tabelle hash e chiavi di contenuto. Usi SHA-256 o simili quando serve resistenza alle collisioni o autenticazione.
Meglio FNV-1 a 32 o a 64 bit?
Usi la larghezza che si aspetta l'altro sistema, perché le due non coincidono mai. Quella a 32 bit è predefinita e dà otto cifre esadecimali, come 31f0b262 per foobar; quella a 64 bit ha un proprio valore iniziale e un proprio numero primo, e ne dà sedici.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/enc/fnv1 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"foobar"}'const res = await fetch("https://api.kit.forhosting.com/enc/fnv1", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "foobar"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/fnv1",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "foobar"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/fnv1", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"foobar"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"foobar"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/fnv1", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "foobar"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.fnv1",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
L'input vuoto viene rifiutato con invalid_input così nessuno confonde un campo mancante con il valore noto del messaggio vuoto uguale alla base di offset.
Contratto di input, errori di stringa vuota e forma della risposta JSON
La stringa viene codificata come UTF-8 prima del ciclo FNV, così i caratteri multi-byte contribuiscono con ogni byte dell'unità di codice esattamente come farebbe un runtime di linguaggio se sottoponesse ad hash lo stesso flusso UTF-8. L'input vuoto viene rifiutato di proposito invece di restituire la sola base di offset, così l'UX di prodotto e gli auto-correttori distinguono risposte mancanti da un hash reale. Fissi sia un percorso di successo sia un errore di input vuoto nell'integrazione continua affinché modifiche accidentali di primo, base o ordine moltiplica-xor non vadano in produzione senza avviso. I campi null opzionali vengono omessi invece di essere emessi come null, secondo il contratto del renderer dichiarativo per form web puliti. Invii un corpo JSON con un campo stringa obbligatorio chiamato text: qualsiasi sequenza non vuota di caratteri che desidera sottoporre ad hash. Gli alias input, value, s, data, message e payload sono accettati per lo stesso campo così stub SDK e invii di form restano flessibili. Il campo opzionale bits seleziona la larghezza: intero trentadue (predefinito) o sessantaquattro; sono accettati gli alias width, bit_width e size. Se manca text, il valore non è una stringa o la stringa è vuota, la richiesta fallisce con invalid_input e un messaggio chiaro che richiede una stringa non vuota; tali fallimenti non vengono addebitati sull'API prepagata. Un valore di bits che non sia né trentadue né sessantaquattro fallisce pure con invalid_input. In caso di successo il corpo include result, fnv1 e hex impostati sullo stesso digest esadecimale minuscolo; bits con la larghezza usata; algorithm fisso su FNV-1-32 o FNV-1-64; input_bytes uguale alla lunghezza UTF-8; text che ripete l'input; e message che riassume il conteggio dei byte e il risultato hex.
Dove un'API di hash FNV-1 crea valore e come funziona il prezzo
Usi lo strumento gratuito nel browser per controlli occasionali; chiami l'API prepagata KIT da backend, funzioni serverless e SDK quando serve un contratto stabile sotto saldo a $0.002 per elemento riuscito. Mantenga i payload a dimensioni di testo ordinarie adatte a una chiamata item in un isolate Worker; questo strumento è per stringhe brevi e frammenti di protocollo, non per blob binari multi-megabyte.
Casi di integrazione
Fixture CI per helper di hash non crittografico
Le pipeline fissano uscite hex FNV-1 deterministiche e l'errore di input vuoto affinché modifiche accidentali di primo, base o ordine falliscano subito.
Domande tecniche
Come si calcola un hash FNV-1 di un testo?
Invii JSON con un campo stringa non vuoto text e, opzionalmente, bits impostato a 32 (predefinito) o 64. L'API codifica la stringa in UTF-8, esegue FNV-1 (moltiplica-poi-xor) e restituisce l'hash in hex minuscolo in result, fnv1 e hex.