Hash FNV-1a
Obtenez l'empreinte FNV-1a de n'importe quel texte, en mêlant chaque octet avant de multiplier : foobar donne bf9cf968 sur 32 bits, ou seize chiffres hexadécimaux sur 64 bits, une étiquette stable pour tables de hachage, filtres de Bloom et clés de cache. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- foobar
- Bits
- 32
- Bits
- 32
- Hash
- bf9cf968
- Hash (entier)
- 3 214 735 720
- Octets
- 6
FNV-1a est la forme alternative du hachage Fowler–Noll–Vo : un condensé non cryptographique rapide bâti sur une base de décalage fixe, un premier soigneusement choisi et une étape par octet exclusive-or puis multiplication, populaire dans les tables de hachage, filtres de Bloom et champs d’empreinte compacts. Les développeurs se tournent vers FNV-1a lorsqu’ils ont besoin d’une étiquette stable de trente-deux ou soixante-quatre bits moins coûteuse qu’un hachage cryptographique et plus sensible à l’ordre qu’une simple somme. Cet outil de hachage FNV-1a accepte du texte brut, le sérialise en UTF-8 et renvoie une chaîne hexadécimale en minuscules—huit chiffres pour le profil trente-deux bits ou seize pour le profil soixante-quatre bits—plus une forme entière, la longueur en octets UTF-8, la largeur choisie et un indicateur empty lorsque la chaîne source a une longueur nulle.
Ce que signifie FNV-1a et comment les profils 32 et 64 bits diffèrent
Les hachages Fowler–Noll–Vo plient un message en un résidu de largeur fixe en partant d’une base de décalage documentée et, pour chaque octet d’entrée, en appliquant d’abord un exclusive-or de l’octet dans le hachage courant puis en multipliant par un premier choisi pour cette largeur. La forme alternative FNV-1a applique l’exclusive-or avant la multiplication ; l’ancienne forme FNV-1 multiplie d’abord. Cette capacité n’implémente que FNV-1a car cet ordre est celui que la plupart des écosystèmes de langages et tutoriels de tables de hachage citent aujourd’hui.
Pour trente-deux bits la base est zéro-x-huit-un-un-c-neuf-d-c-cinq et le premier est zéro-x-zéro-un-zéro-zéro-zéro-un-neuf-trois, produisant une chaîne hex de huit chiffres en minuscules. Pour soixante-quatre bits la base est zéro-x-c-b-f-deux-neuf-c-e-quatre-huit-quatre-deux-deux-deux-trois-deux-cinq et le premier est zéro-x-un-zéro-zéro-zéro-zéro-zéro-zéro-zéro-un-b-trois, produisant seize chiffres hex. FNV-1a est conçu pour un hachage rapide dans les tables et des étiquettes d’intégrité légères ; ce n’est pas un hachage cryptographique et il ne doit pas servir là où une résistance délibérée aux collisions, le stockage de mots de passe ou des schémas de signature sont requis.
Si un outil tiers désaccorde sur les mêmes octets UTF-8, il utilise presque toujours FNV-1 au lieu de FNV-1a, une largeur différente, ou hache des unités UTF-16 au lieu d’octets UTF-8.
Cas d’usage
Clés de table de hachage et étiquettes de seau
Calculez le FNV-1a de chaînes courtes lorsque vous avez besoin d’une empreinte non cryptographique stable de 32 ou 64 bits pour des seaux de table, filtres de Bloom ou clés de fragment de cache.
Démonstrations en classe et en support
Montrez aux étudiants et opérateurs comment éditer quelques caractères change l’hex FNV-1a sans installer d’utilitaires locaux ni de bibliothèques cryptographiques.
Questions fréquentes
Quelle est la différence entre FNV-1a 32 bits et 64 bits ?
Les deux utilisent l’étape FNV-1a exclusive-or puis multiplication sur chaque octet UTF-8, mais avec des bases et premiers différents. Trente-deux bits renvoie huit chiffres hex ; soixante-quatre bits en renvoie seize. Le défaut est 32 si bits est omis.
Que se passe-t-il avec une entrée vide ?
Le texte vide est valide. La réponse met empty à true, hash à la base de décalage de la largeur choisie (811c9dc5 pour 32 bits, cbf29ce484222325 pour 64 bits) et bytes à 0.
FNV-1a est-il un hachage cryptographique ?
Non. FNV-1a est un hachage non cryptographique rapide pour tables et empreintes légères. Ne l’utilisez pas pour les mots de passe, signatures ou une intégrité résistante aux collisions face à des attaquants ; utilisez des digests de la famille SHA dans ces cas.
Pourquoi un autre outil donne-t-il un hachage FNV-1a différent ?
Sur le même texte, l'autre outil utilise presque toujours FNV-1, qui multiplie avant de mêler, une autre largeur, ou les unités UTF-16 du texte au lieu de ses octets UTF-8. Celui-ci travaille sur les octets UTF-8 dans l'ordre de FNV-1a.
Comment se calcule un hachage FNV-1a ?
Il part d'une base fixe, 0x811c9dc5 sur 32 bits. Pour chaque octet du texte, l'octet est d'abord mêlé à la valeur courante par un ou exclusif, puis la valeur est multipliée par le nombre premier 0x01000193 et ramenée à 32 bits.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/enc/fnv1a \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"foobar"}'const res = await fetch("https://api.kit.forhosting.com/enc/fnv1a", {
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/fnv1a",
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/fnv1a", 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/fnv1a", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"text": "foobar"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.fnv1a",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Aucun appel réseau, sel aléatoire ni horloge murale n’entre dans le calcul : chaque chemin réussi est de l’arithmétique pure au prix de base publié $0.002.
Ce que signifie FNV-1a et comment les profils 32 et 64 bits diffèrent
L’entrée vide laisse le résidu égal à la base de décalage elle-même, que cet endpoint signale avec empty à true pour que les clients distinguent un blanc volontaire d’un champ manquant.
Contrat d’entrée, champs de réponse et comportement en entrée vide
La chaîne vide est autorisée exprès : l’identité mathématique de FNV-1a sur zéro octet est la base de décalage, et les pipelines qui empreignent des champs optionnels ont besoin d’un résidu stable plutôt qu’un échec dur. Lorsque la longueur source est nulle, la réponse met empty à true, hash à l’hex de la base pour la largeur choisie et bytes à zéro. Il n’y a pas de commutateur de mode pour FNV-1, MD5, SHA ou CRC : si vous avez besoin de ces digests, utilisez une capacité dédiée pour que chaque page corresponde à une seule intention de recherche et un slug SEO. Envoyez un corps JSON avec le champ obligatoire text égal à la chaîne que vous souhaitez hacher. Les alias input, value, s, string et content sont acceptés pour que les anciens formulaires et clients courts se lient encore. Le bits optionnel choisit la largeur : trente-deux (par défaut) ou soixante-quatre ; les alias width et bit_width sont acceptés, et les formes numériques comme textuelles fonctionnent. Les nombres finis et les grands entiers sont convertis en chaîne avant le hachage ; objets, tableaux, booléens, null, Infinity et NaN provoquent invalid_input et ne sont pas facturés. Pour une entrée non vide empty est false, bytes égale la longueur UTF-8, hash est le digest hex en minuscules sans préfixe zéro-x, et hash_int porte la même valeur comme entier non signé pour trente-deux bits ou comme chaîne décimale pour soixante-quatre bits afin que la plage non signée complète reste exacte en JSON. Algorithm est toujours l’étiquette FNV-1a ; offset_basis et prime répètent les chaînes de paramètres de la largeur sélectionnée pour que les exemples OpenAPI et les réponses de support citent le profil sans ambiguïté.
Où une API de hachage FNV-1a apporte de la valeur
Les développeurs collent de courtes clés, des fragments de configuration et des identifiants de cache dans un calculateur de hachage FNV-1a lorsqu’ils ont besoin d’un index de seau compact de trente-deux ou soixante-quatre bits qui correspond à un runtime de langage ou une note de protocole héritée. Les ingénieurs de support recalculent les digests à partir du texte du ticket pour confirmer qu’un dump collé n’a pas été tronqué ni réencodé en transit. Les laboratoires éducatifs utilisent le même endpoint pour montrer qu’un seul caractère modifié inverse de nombreux chiffres hex, illustrant le comportement d’avalanche sans introduire de machinerie cryptographique. Comme l’implémentation est pure parse de niveau A, chaque appel réussi coûte le prix de base publié $0.002 sans jetons de modèle ni réseau sortant ; une validation échouée ne consomme pas le solde. Gardez les charges sous le plafond de caractères documenté, traitez le champ hex comme cible de collage canonique, et vous obtenez des valeurs FNV-1a reproductibles pour la documentation, les SDK, les workers en bordure et les démonstrations de classe sans dresser un service de hachage séparé.
Cas d'intégration
Vecteurs golden de CI et fixtures d’entrée vide
Épinglez foobar → bf9cf968 (32 bits) et vide → base de décalage pour que l’intégration continue détecte immédiatement FNV-1 vs FNV-1a ou une dérive d’encodage UTF-8.
Questions techniques
Comment calculer un hachage FNV-1a de texte ?
Envoyez un JSON avec text égal à votre chaîne et bits optionnel à 32 ou 64 (défaut 32). Le champ hash renvoie l’hex minuscule du digest FNV-1a sur les octets UTF-8 ; hash_int est la même valeur comme entier non signé (nombre pour 32 bits, chaîne décimale pour 64 bits).
Combien coûte le calculateur de hachage FNV-1a ?
L’outil navigateur est gratuit. Les requêtes API utilisent le solde prépayé KIT à $0.002 par appel réussi ; une entrée invalide n’est pas facturée.