Cifrario del libro
Nasconda un messaggio in un brano condiviso con un'altra persona: con una chiave di 13 parole, «quick fox river» diventa 2 4 12, e quei numeri riportano alle stesse parole. Pensato per enigmi, escape room e lezioni. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Azione
- Encrypt
- Risultato
- 2 4 12
- Numero di parole della chiave
- 13
- Posizioni
- 2, 4, 12
- Parole
- quick, fox, river
Un cifrario del libro nasconde un breve messaggio indicando parole già presenti in un brano condiviso, invece di inventare un alfabeto di sostituzione. Incolli qualsiasi testo chiave che Lei e il suo interlocutore condividiate—un paragrafo, una poesia o una pagina stampata—poi cifri una frase in un elenco di posizioni di parola a partire da 1, oppure decifri quei numeri per tornare alle parole originali. La corrispondenza ignora le maiuscole, la punteggiatura iniziale e finale viene rimossa in tokenizzazione, e le parole del messaggio assenti dalla chiave vengono elencate così Lei può ampliare il brano o riformulare il testo in chiaro. Il motore è puro e deterministico: la stessa chiave e lo stesso messaggio producono sempre le stesse posizioni, senza chiamate di rete, semi casuali o orologi.
Come il cifrario del libro usa le posizioni delle parole
I cifrari del libro classici trattano un testo condiviso come un libro codici. Invece di sostituire lettere con altre lettere, ogni unità del messaggio segreto si scrive come un puntatore verso quel testo—di solito un indice di parola contato dall’inizio del brano. Questo strumento applica una forma chiara e didattica di quell’idea: il testo chiave viene diviso sugli spazi bianchi, a ogni token si toglie la punteggiatura iniziale e finale, e la sequenza risultante è numerata da uno.
In cifratura, ogni parola del messaggio viene cercata senza distinzione di maiuscole contro la prima occorrenza della stessa parola nell’elenco della chiave, e il cifrato è l’elenco di quelle posizioni (base 1) separate da spazi. In decifratura, il campo message si legge come interi separati da spazi, virgole o punti e virgola; ogni numero si risolve nella parola a quell’indice nella chiave. Poiché si usa solo la prima corrispondenza, cifratura e decifratura restano non ambigue anche se una parola si ripete più avanti nel brano.
I caratteri non letterali fuori dai token di parola non diventano mai posizioni da soli, così Lei ragiona sempre su parole intere. Questa costruzione è volutamente più debole della crittografia moderna ed è pensata per l’insegnamento, enigmi ricreativi, riscaldamenti CTF e leggera offuscazione reversibile—non per proteggere segreti reali in transito o a riposo. Frequenza e contesto filtrano ancora quando la chiave è un libro pubblico noto; tratti il brano condiviso come segreto condiviso solo nello spirito di un classico trucco da salotto, non come un canale autenticato.
Casi d'uso
Storia della critto in classe
Mostri agli studenti come un brano condiviso diventi un libro codici e come gli indici di parola cifrino e decifrino senza alfabeto di sostituzione delle lettere.
Design di enigmi ed escape room
Codifichi indizi brevi come elenchi di posizioni che si aprono solo quando i giocatori possiedono lo stesso paragrafo o la stessa poesia stampata.
CTF e cifrari per hobby
Generi sfide reversibili di cifrario del libro e segnali le parole chiave mancanti così gli autori possono affinare il brano prima della pubblicazione.
Domande frequenti
Quali input richiede il cifrario del libro?
Encrypt attende parole in chiaro; decrypt attende numeri di posizione a base 1.
Cosa succede se una parola del messaggio non è nella chiave?
Amplii il brano chiave o riformuli il messaggio per coprirla.
Cosa include una risposta riuscita?
Result sono posizioni separate da spazi in encrypt e parole separate da spazi in decrypt.
Il cifrario del libro è deterministico e sicuro?
È un cifrario classico di posizioni per l’insegnamento e gli enigmi, non la sicurezza crittografica moderna.
Cosa succede se una parola compare più volte nel brano?
Lo strumento usa sempre la prima occorrenza, quindi ogni parola ha una sola posizione. Così cifratura e decifratura restano univoche anche se la parola si ripete più avanti nel testo.
Strumenti correlati
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/enc/book-cipher \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"key_text":"The quick brown fox jumps over the lazy dog near the river bank","message":"quick fox river"}'const res = await fetch("https://api.kit.forhosting.com/enc/book-cipher", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"key_text": "The quick brown fox jumps over the lazy dog near the river bank",
"message": "quick fox river"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/book-cipher",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"key_text": "The quick brown fox jumps over the lazy dog near the river bank",
"message": "quick fox river"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/book-cipher", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"key_text":"The quick brown fox jumps over the lazy dog near the river bank","message":"quick fox river"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"key_text":"The quick brown fox jumps over the lazy dog near the river bank","message":"quick fox river"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/book-cipher", 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
{
"key_text": "The quick brown fox jumps over the lazy dog near the river bank",
"message": "quick fox river"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.book_cipher",
"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. |
Note tecniche
Lo usi gratis nel browser per dimostrazioni in classe e design di enigmi, oppure richiami la logica identica tramite API a $0.002 per richiesta riuscita.
Cifrare, decifrare e parole mancanti
In cifratura il messaggio viene tokenizzato in parole come la chiave; ogni parola è mappata alla sua prima posizione nella chiave quando presente. Le parole mancanti non interrompono una chiamata di cifratura riuscita: vengono segnalate così l’autore può ampliare il brano chiave o eliminare vocabolario raro senza indovinare quale token è fallito. La decifratura non inventa mai vocabolario mancante: ogni numero mappa a una parola della chiave oppure rifiuta la richiesta. Un andata e ritorno encrypt e poi decrypt con la stessa chiave ripristina le forme superficiali della chiave per ogni parola presente, che possono differire in maiuscole dal testo in chiaro originale pur conservando le stesse voci di dizionario. Invii una stringa key_text obbligatoria e una stringa message obbligatoria, e opzionalmente imposti action su encrypt o decrypt (encrypt è il valore predefinito). La risposta include l’azione normalizzata, quante parole contiene la chiave, il messaggio originale, una stringa result di posizioni separate da spazi per ogni parola trovata, gli array paralleli di positions e forme superficiali prese dalla chiave, un elenco missing_words per i token che non compaiono mai nella chiave, e i contatori words_found e words_total. In decifratura il messaggio deve contenere solo posizioni intere positive; un frammento non numerico o una posizione maggiore del conteggio parole della chiave fallisce subito con invalid_input indicando il problema. Un key_text vuoto dopo la tokenizzazione, un message vuoto dopo la tokenizzazione in encrypt, campi mancanti e valori action illegali falliscono anch’essi con invalid_input e non vengono addebitati.
Uso dell’API, prezzi e consigli pratici
Usi action decrypt quando il messaggio è già un elenco di posizioni prodotto per la stessa chiave. Non riutilizzi mai la pagina di un romanzo pubblico come se fosse una chiave moderna: chi indovina il libro può tentare le stesse ricerche. Lo stato è beta mentre la superficie pubblica si stabilizza, ma le regole di mappatura delle posizioni seguono questa costruzione classica fissa e non cambieranno per input identici. Chiami la capacità con key_text e message come campi obbligatori. Il prezzo dell’API ospitata è un importo fisso di $0.002 per richiesta riuscita; i fallimenti di validazione come key_text assente, brano vuoto, token di decifratura non intero o posizione fuori intervallo non consumano saldo. Preferisca un brano abbastanza lungo da coprire il vocabolario così che missing_words resti vuoto, e una formulazione distintiva per verificare a mano gli indici di prima occorrenza. Per le pipeline, invii ogni messaggio come propria attività e raccolga i risultati con il solito flusso webhook o link firmato. Mantenga nomi di campo espliciti invece di impacchettare prosa libera in un unico blocco: il contratto resta allineato a OpenAPI, tipi SDK e controlli di modulo, ed evita un’analisi ambigua di chiave contro cifrato.
Domande tecniche
Quanto costa l’API del cifrario del libro?
Ogni chiamata API riuscita costa $0.002. Lo stesso motore gira gratis nel Suo browser senza account. L’input non valido non viene addebitato.