Firma HMAC-SHA256
L'HMAC è una firma calcolata su un messaggio con una chiave segreta condivisa: chi riceve il messaggio ricalcola l'HMAC con la stessa chiave e, se combacia, sa che il contenuto è autentico e non è stato alterato. Questo strumento del KIT genera e verifica HMAC con SHA-256, SHA-1 o SHA-512, direttamente nel browser.
Esegui gratis nel browser
Funziona nel tuo browser: gratis, senza registrazione, i file non escono dal tuo dispositivo.
HMAC contro hash semplice
Un hash chiunque può ricalcolarlo: non prova chi l'ha prodotto. L'HMAC aggiunge una chiave segreta, quindi solo chi la conosce può generare o verificare la firma. È il meccanismo dietro la maggior parte dei webhook: quando un gateway di pagamento o un servizio ti manda una notifica, allega un HMAC calcolato con un secret concordato. Ricalcolandolo verifichi che la chiamata arrivi davvero da loro e non da un impostore.
Verificare la firma di un webhook
È il caso d'uso numero uno. Ricevi un evento, prendi il corpo grezzo della richiesta, calcoli l'HMAC-SHA256 con il tuo secret e lo confronti con la firma nell'header. Attento a due dettagli: firma il payload esatto, byte per byte, non il JSON riformattato; e confronta le stringhe in modo sicuro. Qui incolli corpo e chiave e vedi subito se la firma torna.
La chiave resta tua
Il secret di un webhook è una credenziale a tutti gli effetti: se finisce nei log di un servizio esterno, chiunque può falsificare le chiamate. Per questo il calcolo avviene interamente nel browser: chiave e messaggio non vengono inviati online, non transitano da nessun server, non restano da nessuna parte. Puoi provare la firma di produzione senza mai esporre il secret.
Nel backend, via API
$0.002 a richiesta quando è il tuo server a dover firmare in automatico, per esempio per autenticare le chiamate verso un partner. Per un controllo manuale mentre fai debug, la pagina è lo strumento giusto e non costa niente.
Casi d'uso
Validare i webhook di pagamento
Rossi & Figli S.r.l. riceve le notifiche di incasso da PayPal. Prima di segnare un ordine come pagato, il sistema verifica l'HMAC della notifica: nessuna firma valida, nessun ordine sbloccato.
Firmare le chiamate a un partner
Uno sviluppatore integra un corriere: ogni richiesta va firmata in HMAC-SHA256 con la chiave fornita. Qui prova la firma su una richiesta di esempio finché non combacia con quella attesa dal partner.
Link con scadenza a prova di manomissione
Un gestionale genera link di download temporanei firmati in HMAC: se qualcuno cambia la data di scadenza nell'URL, la firma non torna più e il link viene rifiutato.
Domande frequenti
Che differenza c'è tra HMAC e un hash normale?
L'hash lo può calcolare chiunque, quindi non autentica nessuno. L'HMAC usa una chiave segreta: solo chi la conosce può produrre o verificare la firma. Serve proprio a provare l'autenticità di un messaggio.
Come verifico la firma di un webhook?
Prendi il corpo grezzo della richiesta, calcola l'HMAC con l'algoritmo e il secret indicati dal servizio, e confrontalo con la firma nell'header. Se coincidono, la chiamata è autentica.
La mia chiave segreta viene inviata online?
No. Chiave e messaggio restano nel browser: il calcolo è locale, niente viene trasmesso o registrato. Puoi usare anche il secret di produzione senza esporlo.
Quale algoritmo devo usare?
Segui quello che indica il servizio da integrare: nella grande maggioranza dei casi è HMAC-SHA256. SHA-1 sopravvive in vecchie integrazioni; SHA-512 quando serve un margine extra.
È davvero gratis?
Nel browser sì, senza limiti né registrazione. Il costo scatta solo via API, a $0.002 a richiesta.
Posso firmare in automatico dal mio server?
Sì, via API a $0.002 a richiesta: pensata per quando è il backend a firmare o verificare a ogni evento.
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/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)Esempio di richiesta
{
"items": [
"valor-1",
"valor-2"
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hmac",
"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. |