Firmar y verificar un payload
Todo webhook, intercambio de llaves de API o cola de mensajes interna que presume ser infalsificable descansa en un mismo principio: un hash con clave. La API HMAC firma o verifica un payload contra un secreto que usted controla, de modo que sus servicios puedan confiar en que un mensaje llegó de donde dice haber llegado y no fue alterado en el camino.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Por qué un hash con clave supera a un checksum simple
Un hash normal como SHA-256 demuestra que un mensaje no se corrompió, pero cualquiera puede calcularlo, incluido un atacante que quiera falsificar una solicitud. HMAC mezcla un secreto compartido dentro del proceso de hashing, de modo que solo quien posea ese secreto puede producir una firma que se verifique correctamente. Esa diferencia explica por qué HMAC está en el centro de la autenticación de webhooks, las URLs firmadas, la integridad de tokens OAuth y la confianza entre servicios en casi cualquier empresa que construye sobre APIs.
Qué hace exactamente el endpoint
Envíe POST /dev/hmac con un payload, un secreto y un algoritmo elegido (SHA-256, SHA-384 o SHA-512), e indique si quiere generar una firma o verificar una existente. La tarea corre de forma asíncrona: recibe un task_id de inmediato, y el resultado — un digest en hexadecimal o base64, o un veredicto simple de válido/inválido — llega por webhook firmado o por un enlace firmado disponible durante 24 horas.
Un poco de historia que sigue siendo relevante
HMAC se formalizó en el RFC 2104 en 1996 y más tarde se estandarizó como FIPS 198, precisamente porque los primeros intentos de agregar una clave a una función hash mediante simple concatenación resultaron vulnerables. La construcción sobrevivió tres décadas de criptoanálisis prácticamente intacta, lo cual explica por qué sigue siendo la opción por defecto para autenticación de mensajes en lugar de alternativas más nuevas y menos probadas.
Dónde encaja en su infraestructura
Los equipos llaman a este endpoint desde emisores de webhooks que necesitan firmar payloads salientes, desde receptores que validan un webhook entrante contra un secreto compartido, desde workers de colas que sellan mensajes antes de publicarlos en un broker, y desde pipelines de CI que firman artefactos de release. Al ser sin estado y asíncrono, se integra en la automatización existente sin que tenga que mantener una librería criptográfica propia, código de rotación de claves ni comparaciones de tiempo constante hechas a mano.
Qué esperar en la entrega
Cada respuesta incluye el algoritmo usado y el digest o resultado de verificación, nada más y nada retenido. Una tarea fallida, por ejemplo un payload malformado, nunca se cobra: la API reintenta fallos transitorios automáticamente hasta tres veces antes de devolver un error claro y accionable.
Qué puede hacer con ella
Emisores de webhooks
Firme cada payload de webhook saliente antes de enviarlo, para que el receptor pueda confirmar que realmente proviene de su sistema.
Validación de webhooks entrantes
Verifique el encabezado de firma de los webhooks que recibe de terceros antes de confiar en el cuerpo del mensaje.
URLs firmadas
Genere un HMAC sobre los parámetros de una URL para crear enlaces de descarga o restablecimiento de contraseña con evidencia de manipulación y expiración incorporada.
Integridad en colas de mensajes
Selle los mensajes con un HMAC antes de publicarlos en una cola, para que los consumidores rechacen cualquier cosa alterada en tránsito.
Preguntas frecuentes
¿Para qué sirve una firma HMAC?
Demuestra que un mensaje no fue alterado y que proviene de alguien que posee el secreto compartido, por eso es el estándar para autenticar webhooks y APIs.
¿Qué algoritmos soporta la API HMAC?
SHA-256, SHA-384 y SHA-512, seleccionables en cada solicitud según el margen de seguridad que necesite su sistema.
¿Existe un plan gratuito para la API de firma HMAC?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Cuánto cuesta firmar o verificar un payload?
$0.002 por solicitud, sin cargo distinto entre firmar y verificar, y las tareas fallidas nunca se cobran.
¿Guardan mi clave secreta?
No. El secreto que envía se usa únicamente para calcular o comprobar la firma de esa solicitud puntual y se descarta al terminar la tarea.
¿Puedo usarla para verificar webhooks de otros proveedores?
Sí. Mientras conozca el algoritmo y el secreto compartido que usa el proveedor, POST /dev/hmac puede validar el encabezado de firma de cualquier payload entrante.
¿Cómo recibo el resultado?
Por webhook firmado, recomendado para pipelines automatizados, o por un enlace firmado que permanece válido durante 24 horas antes de eliminarse.
¿HMAC sigue siendo seguro en 2026?
Sí, HMAC combinado con SHA-256 o algo más fuerte sigue siendo una construcción recomendada; su seguridad depende de mantener el secreto privado y elegir una clave suficientemente larga.
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, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/hmac \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/dev/hmac", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/hmac",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/hmac", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/hmac", 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
{
"items": [
"valor-1",
"valor-2"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hmac",
"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. |