Calculadora hash FNV-1
Calcule el hash de un texto a la manera original de Fowler, Noll y Vo, multiplicando antes de mezclar cada byte: foobar da 31f0b262 en 32 bits, el valor que las tablas de referencia dan para FNV-1 y no para FNV-1a. Elija 32 o 64 bits. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- foobar
- Resultado
- 31f0b262
- Fnv1
- 31f0b262
- Hex
- 31f0b262
- Bits
- 32
FNV-1 es un hash no criptográfico diseñado por Glenn Fowler, Landon Curt Noll y Phong Vo. Procesa cada mensaje como una secuencia de bytes y, por cada byte, multiplica el hash en curso por un primo FNV fijo y después aplica xor del byte sobre el producto. Ese orden multiplicar-luego-xor distingue FNV-1 de FNV-1a, que hace xor primero y multiplica después; ambos comparten las mismas bases de desplazamiento y primos, pero producen resúmenes distintos para toda cadena no vacía. Esta herramienta de hash FNV-1 acepta texto no vacío, lo codifica como UTF-8, ejecuta el bucle determinista al ancho pedido y devuelve el resumen hex junto con la etiqueta del algoritmo, el ancho en bits, el recuento de bytes y un breve resumen.
Qué calcula FNV-1 y por qué importan el ancho y la longitud hex
FNV-1 trata cada mensaje como una secuencia ordenada de octetos. El registro del hash se inicializa con una base de desplazamiento publicada: hexadecimal ocho uno uno c nueve d c cinco para treinta y dos bits, o c b f dos nueve c e cuatro ocho cuatro dos dos dos tres dos cinco para sesenta y cuatro bits.
Por cada byte de entrada el algoritmo multiplica el hash actual por el primo FNV correspondiente—cero uno cero cero cero uno nueve tres en treinta y dos bits, o uno cero cero cero cero cero cero cero uno b tres en sesenta y cuatro bits—y después aplica xor exclusivo del byte sobre el producto, recortando al ancho de bits elegido.
Una cadena de comprobación bien conocida es foobar: FNV-1 a treinta y dos bits produce tres uno f cero b dos seis dos, que coincide con tablas de referencia independientes del orden original multiplicar-luego-xor. La respuesta también devuelve bits, la etiqueta de algoritmo FNV-1-32 o FNV-1-64, el recuento de bytes UTF-8 y el texto original para que los clientes muestren una línea de auditoría completa sin recalcular metadatos.
Como FNV-1 no es resistente a colisiones, no está cifrado con clave y no sirve para contraseñas ni firmas, trátelo como un identificador de contenido rápido o semilla de tabla hash, no como prueba de autenticidad. Prefiera resúmenes de la familia SHA cuando la intención de búsqueda sea el hash criptográfico y no un hash no criptográfico Fowler–Noll–Vo.
Para qué sirve un hash FNV-1
Autores de runtimes de lenguaje y estudiantes de sistemas usan una calculadora de hash FNV-1 para verificar a mano los pasos multiplicar-luego-xor frente a las bases de desplazamiento y primos publicados sin escribir un bucle de multiplicación modular en cada lenguaje. Las plataformas docentes y los plugins LMS necesitan un oráculo determinista que rechace la entrada vacía en lugar de devolver la base de desplazamiento sola, de modo que los autoevaluadores distingan respuestas ausentes de un resumen real.
Los sitios de contenido que posicionan por hash FNV-1 o calculadora FNV1 se benefician de una herramienta en vivo cuya ruta gratuita coincide byte a byte con la automatización de pago en el mismo módulo puro. Los fallos de validación no consumen saldo tras el rechazo. Combine con landings de FNV-1a, Adler-32, CRC o hash criptográfico solo cuando la intención de búsqueda se aleje del FNV-1 original: mantenga esta página centrada en FNV-1 para que la intención SEO siga nítida y no canibalice landings de checksum o digest relacionados.
Qué puede hacer con ella
Semillas para tablas hash y filtros bloom
Genere claves hex estables FNV-1-32 o FNV-1-64 para cadenas cortas usadas como cubetas de mapa, filtros bloom o semillas de feature flag entre lenguajes.
Demostraciones de aula del FNV multiplicar-luego-xor
El profesorado muestra el valor clásico de comprobación de foobar y deja que el alumnado recalcule otras cadenas cortas sin instalar una biblioteca criptográfica.
Preguntas frecuentes
¿Cuál es la diferencia entre FNV-1 y FNV-1a?
FNV-1 multiplica primero por el primo FNV y después aplica xor del byte. FNV-1a hace xor primero y multiplica después. Esta herramienta implementa solo FNV-1; los resúmenes no coincidirán con las tablas de FNV-1a.
¿Qué ocurre si el texto está vacío?
Se exige una cadena no vacía; la entrada vacía no se trata como un hash correcto de solo la base de desplazamiento.
¿Es gratuita la calculadora de hash FNV-1?
La herramienta del navegador se ejecuta gratis en su dispositivo.
¿Es FNV-1 un hash criptográfico?
No. FNV-1 es un hash no criptográfico rápido para tablas hash y claves de contenido. Use SHA-256 o similar cuando necesite resistencia a colisiones o autenticación.
¿Conviene usar FNV-1 de 32 o de 64 bits?
Use el ancho que espere el otro sistema, porque los dos nunca coinciden. El de 32 bits es el predeterminado y da ocho cifras hexadecimales, como 31f0b262 para foobar; el de 64 bits tiene su propio valor inicial y su propio primo, y da dieciséis.
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/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)Ejemplo de solicitud
{
"text": "foobar"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.fnv1",
"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
La entrada vacía se rechaza con invalid_input para que nadie confunda un campo ausente con el valor conocido del mensaje vacío igual a la base de desplazamiento.
Contrato de entrada, errores de cadena vacía y forma de la respuesta JSON
La cadena se codifica como UTF-8 antes del bucle FNV, de modo que los caracteres multibyte aportan cada byte de la unidad de código exactamente como lo haría un runtime de lenguaje al hashear el mismo flujo UTF-8. La entrada vacía se rechaza a propósito en lugar de devolver solo la base de desplazamiento, para que la UX del producto y los autoevaluadores distingan respuestas ausentes de un hash real. Fije tanto un camino de éxito como un error de entrada vacía en la integración continua para que cambios accidentales de primo, base u orden multiplicar-xor no se publiquen sin aviso. Los campos nulos opcionales se omiten en lugar de emitirse como null, según el contrato del renderizador declarativo para formularios web limpios. Envíe un cuerpo JSON con un campo de cadena obligatorio llamado text: cualquier secuencia no vacía de caracteres que desee hashear. Se aceptan los alias input, value, s, data, message y payload para el mismo campo, de modo que los stubs de SDK y los envíos de formulario sigan siendo flexibles. El campo opcional bits elige el ancho: entero treinta y dos (predeterminado) o sesenta y cuatro; se aceptan los alias width, bit_width y size. Si falta text, el valor no es una cadena o la cadena está vacía, la petición falla con invalid_input y un mensaje claro de que se exige una cadena no vacía; esos fallos no se facturan en la API prepago. Un valor de bits que no sea treinta y dos ni sesenta y cuatro también falla con invalid_input. En caso de éxito el cuerpo incluye result, fnv1 y hex con el mismo resumen hexadecimal en minúsculas; bits con el ancho usado; algorithm fijo en FNV-1-32 o FNV-1-64; input_bytes igual a la longitud UTF-8; text repitiendo la entrada; y message resumiendo el recuento de bytes y el resultado hex.
Dónde aporta valor una API de hash FNV-1 y cómo funciona el precio
Use la herramienta gratuita en el navegador para comprobaciones puntuales; llame a la API prepago de KIT desde backends, funciones serverless y SDKs cuando necesite un contrato estable bajo saldo a $0.002 por ítem exitoso. Mantenga las cargas en tamaños de texto ordinarios adecuados a una llamada de ítem en un isolate de Worker; esta herramienta es para cadenas cortas y fragmentos de protocolo, no para blobs binarios de varios megabytes.
Casos de integración
Fixtures de CI para ayudas de hash no criptográfico
Las canalizaciones fijan salidas hex FNV-1 deterministas y el error de entrada vacía para que cambios accidentales de primo, base u orden fallen de inmediato.
Preguntas técnicas
¿Cómo se calcula un hash FNV-1 de un texto?
Envíe JSON con un campo de cadena no vacío text y, opcionalmente, bits en 32 (predeterminado) o 64. La API codifica la cadena en UTF-8, ejecuta FNV-1 (multiplicar-luego-xor) y devuelve el hash en hex minúsculas en result, fnv1 y hex.