Chiffre de livre
Cachez un message dans un passage que vous partagez avec quelqu'un : avec une clé de 13 mots, « quick fox river » devient 2 4 12, et ces nombres redonnent les mêmes mots. Idéal pour les énigmes et les cours. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Action
- Encrypt
- Résultat
- 2 4 12
- Nombre de mots de la clé
- 13
- Positions
- 2, 4, 12
- Mots
- quick, fox, river
Un chiffre de livre dissimule un court message en désignant des mots déjà présents dans un passage partagé, plutôt qu’en inventant un alphabet de substitution. Collez tout texte clé que vous et votre correspondant détenez tous les deux—un paragraphe, un poème ou une page imprimée—puis chiffrez une phrase en une liste de positions de mots à partir de 1, ou déchiffrez ces nombres pour retrouver les mots d’origine. La correspondance ignore la casse, la ponctuation en tête et en fin est retirée lors de la tokenisation, et les mots du message absents de la clé sont listés afin que vous puissiez enrichir le passage ou reformuler le clair. Le moteur est pur et déterministe : la même clé et le même message produisent toujours les mêmes positions, sans appels réseau, graines aléatoires ni horloge.
Comment le chiffre de livre utilise les positions de mots
Les chiffres de livre classiques traitent un texte partagé comme un carnet de codes. Au lieu de remplacer des lettres par d’autres lettres, chaque unité du message secret s’écrit comme un pointeur vers ce texte—le plus souvent un indice de mot compté depuis le début du passage. Cet outil met en œuvre une forme claire et pédagogique de cette idée : le texte clé est découpé sur les espaces, chaque jeton perd sa ponctuation initiale et finale, et la séquence résultante est numérotée à partir de un.
Lors du chiffrement, chaque mot du message est recherché sans tenir compte de la casse contre la première occurrence du même mot dans la liste de la clé, et le chiffré est la liste de ces positions (base 1) séparées par des espaces. Lors du déchiffrement, le champ message est lu comme des entiers séparés par des espaces, des virgules ou des points-virgules ; chaque nombre est résolu vers le mot à cet indice dans la clé.
Comme seule la première correspondance est utilisée, chiffrement et déchiffrement restent non ambigus même si un mot se répète plus loin dans le passage. Les caractères non alphabétiques hors des jetons de mot ne deviennent jamais des positions à eux seuls, de sorte que vous raisonnez toujours sur des mots entiers. Cette construction est volontairement plus faible que la cryptographie moderne et vise l’enseignement, les énigmes récréatives, les échauffements CTF et une obfuscation réversible légère—pas la protection de secrets réels en transit ou au repos.
La fréquence et le contexte fuient encore lorsque la clé est un livre public connu ; traitez le passage partagé comme un secret partagé seulement dans l’esprit d’un tour de salon classique, non comme un canal authentifié.
Cas d’usage
Histoire de la crypto en classe
Montrez aux élèves comment un passage partagé devient un carnet de codes et comment les indices de mots chiffrent et déchiffrent sans alphabet de substitution de lettres.
Conception d’énigmes et d’escape rooms
Encodez de courts indices sous forme de listes de positions qui ne s’ouvrent que lorsque les joueurs détiennent le même paragraphe ou poème imprimé.
CTF et chiffres de loisir
Générez des défis réversibles de chiffre de livre et signalez les mots de clé manquants pour que les auteurs ajustent le passage avant publication.
Questions fréquentes
Quelles entrées le chiffre de livre exige-t-il ?
Encrypt attend des mots en clair ; decrypt attend des numéros de position en base 1.
Que se passe-t-il si un mot du message n’est pas dans la clé ?
Enrichissez le passage clé ou reformulez le message pour le couvrir.
Que contient une réponse réussie ?
Result regroupe des positions séparées par des espaces au chiffrement et des mots séparés par des espaces au déchiffrement.
Le chiffre de livre est-il déterministe et sûr ?
C’est un chiffre classique de positions pour l’enseignement et les énigmes, pas la sécurité cryptographique moderne.
Que se passe-t-il si un mot apparaît plusieurs fois dans le passage ?
L'outil retient toujours sa première occurrence, si bien que chaque mot n'a qu'une seule position. Le chiffrement et le déchiffrement restent ainsi sans ambiguïté, même si le mot revient plus loin dans le texte.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"key_text": "The quick brown fox jumps over the lazy dog near the river bank",
"message": "quick fox river"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.book_cipher",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Utilisez-le gratuitement dans le navigateur pour des démonstrations en classe et la conception d’énigmes, ou appelez la logique identique via l’API à $0.002 par requête réussie.
Chiffrer, déchiffrer et mots manquants
Au chiffrement, le message est tokenisé en mots comme la clé ; chaque mot est associé à sa première position dans la clé lorsqu’il y figure. Les mots manquants n’interrompent pas un appel de chiffrement réussi : ils sont signalés pour que l’auteur puisse enrichir le passage clé ou retirer un vocabulaire rare sans deviner quel jeton a échoué. Le déchiffrement n’invente jamais de vocabulaire manquant : chaque nombre mappe vers un mot de la clé ou rejette la requête. Un aller-retour chiffrement puis déchiffrement avec la même clé restaure les formes de surface de la clé pour chaque mot présent, qui peuvent différer en capitalisation du clair d’origine tout en conservant les mêmes entrées de dictionnaire. Envoyez une chaîne key_text obligatoire et une chaîne message obligatoire, et définissez éventuellement action sur encrypt ou decrypt (encrypt est la valeur par défaut). La réponse comprend l’action normalisée, le nombre de mots de la clé, le message d’origine, une chaîne result de positions séparées par des espaces pour chaque mot trouvé, les tableaux parallèles de positions et de formes de surface tirées de la clé, une liste missing_words pour les jetons absents de la clé, et les compteurs words_found et words_total. Au déchiffrement, le message ne doit contenir que des positions entières positives ; un fragment non numérique ou une position supérieure au nombre de mots de la clé échoue immédiatement avec invalid_input en nommant le problème. Un key_text vide après tokenisation, un message vide après tokenisation au chiffrement, des champs manquants et des valeurs d’action illégales échouent aussi avec invalid_input et ne sont pas facturés.
Utilisation de l’API, tarifs et conseils pratiques
Ne réutilisez jamais la page d’un roman public comme s’il s’agissait d’une clé moderne : quiconque devine le livre peut tenter les mêmes recherches. Le statut est beta tant que la surface publique se stabilise, mais les règles de correspondance des positions suivent cette construction classique fixe et ne changeront pas pour des entrées identiques. Appelez la capacité avec key_text et message comme champs obligatoires. Utilisez action decrypt lorsque le message est déjà une liste de positions produite pour cette même clé. Le tarif de l’API hébergée est un montant fixe de $0.002 par requête réussie ; les échecs de validation tels qu’un key_text manquant, un passage vide, un jeton de déchiffrement non entier ou une position hors plage ne consomment pas de solde. Préférez un passage assez long pour couvrir votre vocabulaire afin que missing_words reste vide, et une formulation distinctive pour vérifier à la main les indices de première occurrence. Pour les pipelines, soumettez chaque message comme sa propre tâche et collectez les résultats via votre flux habituel de webhook ou de lien signé. Gardez des noms de champs explicites plutôt que d’emballer de la prose libre dans un seul bloc : le contrat reste aligné sur OpenAPI, les types SDK et les contrôles de formulaire, et évite une analyse ambiguë de la clé face au chiffré.
Questions techniques
Combien coûte l’API du chiffre de livre ?
Chaque appel API réussi coûte $0.002. Le même moteur s’exécute gratuitement dans votre navigateur sans compte. Une entrée invalide n’est pas facturée.