Hash FNV-1a
Obtenga la huella FNV-1a de cualquier texto, mezclando cada byte antes de multiplicar: foobar da bf9cf968 en 32 bits, o dieciséis cifras hexadecimales en 64 bits, una etiqueta estable para tablas hash, filtros bloom y claves de caché. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- foobar
- Bits
- 32
- Bits
- 32
- Hash
- bf9cf968
- Hash (entero)
- 3 214 735 720
- Bytes
- 6
FNV-1a es la variante alterna del hash Fowler–Noll–Vo: un resumen no criptográfico rápido construido a partir de una base de desplazamiento fija, un primo elegido con cuidado y un paso por byte de exclusive-or y luego multiplicación, muy usado en tablas hash, filtros bloom y campos de huella compactos. Los desarrolladores recurren a FNV-1a cuando necesitan una etiqueta estable de treinta y dos o sesenta y cuatro bits más barata que un hash criptográfico y más sensible al orden que una suma simple. Esta herramienta de hash FNV-1a acepta texto plano, lo serializa como UTF-8 y devuelve una cadena hexadecimal en minúsculas—ocho dígitos para el perfil de treinta y dos bits o dieciséis para el de sesenta y cuatro—más una forma entera, la longitud en bytes UTF-8, el ancho elegido y un indicador empty cuando la cadena de origen tiene longitud cero.
Qué significa FNV-1a y cómo difieren los perfiles de 32 y 64 bits
Los hashes Fowler–Noll–Vo pliegan un mensaje en un residual de ancho fijo partiendo de una base de desplazamiento documentada y, por cada byte de entrada, primero hacen exclusive-or del byte con el hash en curso y después multiplican por un primo elegido para ese ancho. La forma alterna FNV-1a aplica el exclusive-or antes de la multiplicación; la forma antigua FNV-1 multiplica primero. Esta capacidad implementa solo FNV-1a porque ese orden es el que la mayoría de ecosistemas de lenguaje y tutoriales de tablas hash citan hoy.
Para treinta y dos bits la base es cero-x-ocho-uno-uno-c-nueve-d-c-cinco y el primo es cero-x-cero-uno-cero-cero-cero-uno-nueve-tres, produciendo una cadena hex de ocho dígitos en minúsculas. Para sesenta y cuatro bits la base es cero-x-c-b-f-dos-nueve-c-e-cuatro-ocho-cuatro-dos-dos-dos-tres-dos-cinco y el primo es cero-x-uno-cero-cero-cero-cero-cero-cero-cero-uno-b-tres, produciendo dieciséis dígitos hex. FNV-1a está pensado para hashing rápido en tablas y etiquetas de integridad ligeras; no es un hash criptográfico y no debe usarse donde se exija resistencia deliberada a colisiones, almacenamiento de contraseñas o esquemas de firma.
Si una herramienta de terceros discrepa sobre los mismos bytes UTF-8, casi siempre usa FNV-1 en lugar de FNV-1a, un ancho distinto o hashea unidades UTF-16 en lugar de bytes UTF-8.
Qué puede hacer con ella
Claves de tabla hash y etiquetas de cubo
Calcule FNV-1a de cadenas cortas cuando necesite una huella no criptográfica estable de 32 o 64 bits para cubos de tabla, filtros bloom o claves de fragmento de caché.
Demostraciones de aula y de soporte
Muestre a estudiantes y operadores cómo editar unos pocos caracteres cambia el hex FNV-1a sin instalar utilidades locales ni bibliotecas criptográficas.
Preguntas frecuentes
¿Cuál es la diferencia entre FNV-1a de 32 y de 64 bits?
Ambos usan el paso FNV-1a de exclusive-or y luego multiplicación en cada byte UTF-8, pero con bases y primos distintos. Treinta y dos bits devuelve ocho dígitos hex; sesenta y cuatro bits devuelve dieciséis. El predeterminado es 32 si se omite bits.
¿Qué ocurre con la entrada vacía?
El texto vacío es válido. La respuesta pone empty en true, hash en la base de desplazamiento del ancho elegido (811c9dc5 para 32 bits, cbf29ce484222325 para 64 bits) y bytes en 0.
¿Es FNV-1a un hash criptográfico?
No. FNV-1a es un hash no criptográfico rápido para tablas y huellas ligeras. No lo use para contraseñas, firmas ni integridad resistente a colisiones frente a atacantes; use digests de la familia SHA en esos casos.
¿Por qué otra herramienta da un hash FNV-1a distinto?
Con el mismo texto, casi siempre la otra herramienta usa FNV-1, que multiplica antes de mezclar, otro ancho, o las unidades UTF-16 del texto en lugar de sus bytes UTF-8. Esta calcula sobre los bytes UTF-8 en el orden de FNV-1a.
¿Cómo se calcula un hash FNV-1a?
Parte de una base fija, 0x811c9dc5 en 32 bits. Para cada byte del texto, primero se mezcla el byte con el valor acumulado mediante una o exclusiva y después el valor se multiplica por el primo 0x01000193, conservando 32 bits.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"text": "foobar"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.fnv1a",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Ninguna llamada de red, sal aleatoria ni reloj de pared intervienen en el cálculo: cada camino exitoso es aritmética pura al precio base publicado $0.002.
Qué significa FNV-1a y cómo difieren los perfiles de 32 y 64 bits
La entrada vacía deja el residual igual a la propia base de desplazamiento, y este endpoint lo reporta con empty en true para que los clientes distingan un blanco deliberado de un campo ausente.
Contrato de entrada, campos de respuesta y comportamiento con entrada vacía
La cadena vacía se permite a propósito: la identidad matemática de FNV-1a sobre cero bytes es la base de desplazamiento, y las canalizaciones que huellan campos opcionales necesitan un residual estable en lugar de un fallo duro. Cuando la longitud de origen es cero, la respuesta pone empty en true, hash en el hex de la base para el ancho elegido y bytes en cero. No hay conmutador de modo para FNV-1, MD5, SHA o CRC: si necesita esos digests, use una capacidad dedicada para que cada página coincida con una sola intención de búsqueda y slug SEO. Envíe un cuerpo JSON con el campo obligatorio text igual a la cadena que desea hashear. Se aceptan los alias input, value, s, string y content para que formularios antiguos y clientes breves sigan enlazando. El bits opcional elige el ancho: treinta y dos (predeterminado) o sesenta y cuatro; se aceptan los alias width y bit_width, y funcionan tanto formas numéricas como de cadena. Los números finitos y los enteros grandes se convierten a cadena antes del hash; objetos, arrays, booleanos, null, Infinity y NaN provocan invalid_input y no se facturan. Con entrada no vacía empty es false, bytes iguala la longitud UTF-8, hash es el digest hex en minúsculas sin prefijo cero-x, y hash_int lleva el mismo valor como entero sin signo para treinta y dos bits o como cadena decimal para sesenta y cuatro bits, de modo que el rango sin signo completo se mantiene exacto en JSON. Algorithm es siempre la etiqueta FNV-1a; offset_basis y prime repiten las cadenas de parámetros del ancho seleccionado para que ejemplos OpenAPI y respuestas de soporte citen el perfil sin ambigüedad.
Dónde una API de hash FNV-1a aporta valor
Los desarrolladores pegan claves cortas, fragmentos de configuración e identificadores de caché en una calculadora de hash FNV-1a cuando necesitan un índice de cubo compacto de treinta y dos o sesenta y cuatro bits que coincida con un runtime de lenguaje o una nota de protocolo heredada. Los ingenieros de soporte recalculan digests a partir del texto del ticket para confirmar que un volcado pegado no se truncó ni se recodificó en tránsito. Los laboratorios educativos usan el mismo endpoint para mostrar que cambiar un solo carácter invierte muchos dígitos hex, ilustrando el comportamiento de avalancha sin introducir maquinaria criptográfica. Como la implementación es parse pura de nivel A, cada llamada exitosa cuesta el precio base publicado $0.002 sin tokens de modelo ni red saliente; la validación fallida no consume saldo. Mantenga las cargas bajo el techo de caracteres documentado, trate el campo hex como destino canónico de pegado, y obtendrá valores FNV-1a reproducibles para documentación, SDK, workers en el borde y demostraciones de aula sin levantar un servicio de hash aparte.
Casos de integración
Vectores golden de CI y fixtures de entrada vacía
Fije foobar → bf9cf968 (32 bits) y vacío → base de desplazamiento para que la integración continua detecte al instante FNV-1 frente a FNV-1a o deriva de codificación UTF-8.
Preguntas técnicas
¿Cómo calculo un hash FNV-1a de texto?
Envíe JSON con text igual a su cadena y bits opcional de 32 o 64 (predeterminado 32). El campo hash devuelve hex en minúsculas del digest FNV-1a sobre bytes UTF-8; hash_int es el mismo valor como entero sin signo (número para 32 bits, cadena decimal para 64 bits).
¿Cuánto cuesta la calculadora de hash FNV-1a?
La herramienta en el navegador es gratuita. Las solicitudes API usan saldo prepago KIT a $0.002 por llamada exitosa; la entrada inválida no se factura.