{"id":1354,"date":"2026-05-22T15:03:56","date_gmt":"2026-05-22T14:03:56","guid":{"rendered":"https:\/\/geekcommunicant.com\/blog\/?p=1354"},"modified":"2026-05-22T15:06:12","modified_gmt":"2026-05-22T14:06:12","slug":"chiffre-cesar-python","status":"publish","type":"post","link":"https:\/\/geekcommunicant.com\/blog\/2026\/05\/22\/chiffre-cesar-python\/","title":{"rendered":"Chiffre de C\u00e9sar en Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Pour commencer, un petit rappel sur ce qu&rsquo;est le chiffre de C\u00e9sar. Il s&rsquo;agit d&rsquo;une technique de chiffrement tr\u00e8s simple, consistant \u00e0 d\u00e9caler les lettres de l&rsquo;alphabet d&rsquo;un nombre de crans.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple, si on dit que le d\u00e9calage est de 4, \u00ab\u00a0a\u00a0\u00bb devient \u00ab\u00a0e\u00a0\u00bb, \u00ab\u00a0b\u00a0\u00bb devient \u00ab\u00a0f\u00a0\u00bb, \u00ab\u00a0c\u00a0\u00bb devient \u00ab\u00a0g\u00a0\u00bb, etc\u2026<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment le faire en Python ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Comme ici chaque lettre est toujours remplac\u00e9e par la m\u00eame, il y a une fonction parfaite pour \u00e7a : <a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html#str.translate\" \"=\"\">str.translate()<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cette fonction prend pour param\u00e8tre une table de traduction, g\u00e9n\u00e9r\u00e9e par <a href=\"https:\/\/docs.python.org\/3\/library\/stdtypes.html#str.maketrans\">str.maketrans()<\/a>, qui elle prend en param\u00e8tres deux cha\u00eenes de caract\u00e8res :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>les lettres de d\u00e9part, dans notre cas l&rsquo;alphabet<\/li>\n\n\n\n<li>les lettres de remplacement, dans l&rsquo;ordre, c&rsquo;est-\u00e0-dire qu&rsquo;avec \u00ab\u00a0abc&#8230;\u00a0\u00bb au d\u00e9part, et un d\u00e9calage de 4, la cha\u00eene de remplacement est \u00ab\u00a0efg&#8230;\u00a0\u00bb<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bon, c&rsquo;est bien sympa ce principe, mais comment on fait concr\u00e8tement ?<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Le point le plus compliqu\u00e9 reste la construction de l&rsquo;alphabet d\u00e9cal\u00e9. Pour \u00e7a, il faut utiliser les <em>slices<\/em> de cha\u00eenes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour rappel, les <em>slices<\/em> permettent de ne r\u00e9cup\u00e9rer qu&rsquo;une partie d&rsquo;une cha\u00eene. Leur syntaxe est <code>ma_chaine[&lt;index de d\u00e9part&gt;:&lt;index d'arriv\u00e9 (non inclus)&gt;:&lt;d\u00e9calage&gt;]<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nalphabet = &#039;abcdefghijklmnopqrstuvwxyz&#039;\n\nalphabet&#x5B;2:5] # &#039;cde&#039;\n\nalphabet&#x5B;0:5] # &#039;abcde&#039;\n\nalphabet&#x5B;0:5:2]\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Je n&rsquo;ai fait ici qu&rsquo;une pr\u00e9sentation rapide. Pour en savoir plus sur les <em>slices<\/em>, allez voir la <a href=\"https:\/\/docs.python.org\/3.14\/reference\/expressions.html#slicings\">doc Python<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans notre cas, pour construire l&rsquo;alphabet d\u00e9cal\u00e9, il faut d&rsquo;abord prendre la partie de l&rsquo;index du d\u00e9calage jusqu&rsquo;\u00e0 la fin, et lui coller apr\u00e8s la partie du d\u00e9but jusqu&rsquo;\u00e0 l&rsquo;index du d\u00e9calage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce qui en code donne :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nalphabet_decale = alphabet&#x5B;decalage:] + alphabet&#x5B;:decalage]\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Une fois l&rsquo;alphabet d\u00e9cal\u00e9 g\u00e9n\u00e9r\u00e9, il ne reste plus qu&rsquo;\u00e0 cr\u00e9er la table de traduction, et l&rsquo;utiliser avec .translate() sur le texte de d\u00e9part.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ntable_de_correpondances = str.maketrans(alphabet, alphabet_decale)\ntexte_cesar = texte.translate(table_de_correspondances)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Et voil\u00e0 ^^<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le code donn\u00e9 en exemple permet de coder, pour d\u00e9coder, il suffit d&rsquo;inverser les deux param\u00e8tre de str.maketrans().<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En emballant tout \u00e7a dans une belle fonction, et en rajoutant les majuscules, cela nous donne :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ndef caesar_cypher(shift: int, txt: str, encode: Boolean = False) -&gt; str:\n    alphabet = &#039;abcdefghijklmnopqrstuvwxyz&#039;\n    full_alphabet = alphabet + alphabet.upper()\n\n    shifted_alphabet = alphabet&#x5B;shift:] + alphabet&#x5B;:shift]\n    full_shifted_alphabet = shifted_alphabet + shifted_alphabet.upper()\n\n    if encode is True:\n        translation_table = str.maketrans(full_alphabet, full_shifted_alphabet)\n    else:\n        translation_table = str.maketrans(full_shifted_alphabet, full_alphabet)\n\n    return txt.translate(translation_table)\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Pour commencer, un petit rappel sur ce qu&rsquo;est le chiffre de C\u00e9sar. Il s&rsquo;agit d&rsquo;une technique de chiffrement tr\u00e8s simple, consistant \u00e0 d\u00e9caler les lettres de l&rsquo;alphabet d&rsquo;un nombre de crans. Par exemple, si on dit que le d\u00e9calage est &hellip; <a href=\"https:\/\/geekcommunicant.com\/blog\/2026\/05\/22\/chiffre-cesar-python\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[74],"tags":[],"class_list":["post-1354","post","type-post","status-publish","format-standard","hentry","category-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2IoOb-lQ","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":790,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/05\/20\/carte-interactive-svg-tooltip\/","url_meta":{"origin":1354,"position":0},"title":"Carte interactive en SVG avec tooltip","author":"geekc","date":"20\/05\/2019","format":false,"excerpt":"Apr\u00e8s la premi\u00e8re version de ma carte interactive (voir ici), j\u2019en ai cr\u00e9\u00e9 une deuxi\u00e8me \u00e0 l\u2019aide de la librairie OpenLayers. Cette solution fonctionne, mais c\u2019est comme disposer d'un outil multifonction mais d'en n'utiliser qu'une ou deux, OpenLayers \u00e9tant une librairie permettant de faire beaucoup plus. Une autre solution un\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/svg-map-style.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1121,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/02\/24\/gloubi-script-cadre-clignotant\/","url_meta":{"origin":1354,"position":1},"title":"Gloubi script &#8211; un cadre clignotant","author":"geekc","date":"24\/02\/2023","format":false,"excerpt":"Aujourd\u2019hui, nous allons nous attaquer \u00e0 un script pr\u00e9sent\u00e9 chez notre gloubi rival qui pourra vous \u00eatre tr\u00e8s utile pour mettre en avant n\u2019importe quel contenu sur, par exemple, la magnifique page d\u2019accueil de votre tout aussi sublime site\u00a0: le cadre clignotant. Comme pour d\u2019autres gloubi scripts d\u00e9j\u00e0 pr\u00e9sent\u00e9s, il\u2026","rel":"","context":"Dans &quot;CSS&quot;","block_context":{"text":"CSS","link":"https:\/\/geekcommunicant.com\/blog\/category\/css\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":326,"url":"https:\/\/geekcommunicant.com\/blog\/2014\/04\/06\/comment-marche-le-web\/","url_meta":{"origin":1354,"position":2},"title":"Comment marche le Web ?","author":"geekc","date":"06\/04\/2014","format":false,"excerpt":"Vous vous \u00eates toujours demand\u00e9 quelle diff\u00e9rence il pouvait y avoir entre le HTML et le PHP, entre le CSS et le JavaScript ? Cet article est fait pour vous. Apr\u00e8s l'avoir lu, vous serez incollables, ou presque, sur les technologies du Web. HTML et CSS Le HTML est la\u2026","rel":"","context":"Dans &quot;Pour les nuls&quot;","block_context":{"text":"Pour les nuls","link":"https:\/\/geekcommunicant.com\/blog\/category\/pour-les-nuls\/"},"img":{"alt_text":"HTML, CSS, et JavaScript","src":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/logo_html5-300x175.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1348,"url":"https:\/\/geekcommunicant.com\/blog\/2026\/05\/18\/comment-ajouter-series-kobo-sans-calibre\/","url_meta":{"origin":1354,"position":3},"title":"Comment ajouter des s\u00e9ries sur une liseuse Kobo sans utiliser de gestionnaire de type Calibre","author":"geekc","date":"18\/05\/2026","format":false,"excerpt":"R\u00e9cemment, j\u2019ai rajout\u00e9 des livres \u00e0 ma liseuse Kobo, et j\u2019ai voulu les organiser en s\u00e9rie, car contrairement aux collections, on peut ordonner les livres d\u2019une s\u00e9rie. Pour faire \u00e7a on peut utiliser un logiciel de gestion, comme Calibre, mais moi j\u2019ai pr\u00e9f\u00e9r\u00e9 passer par une solution plus bas niveau,\u2026","rel":"","context":"Dans &quot;Divers&quot;","block_context":{"text":"Divers","link":"https:\/\/geekcommunicant.com\/blog\/category\/divers\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20260518_095004.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20260518_095004.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20260518_095004.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/Screenshot_20260518_095004.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":211,"url":"https:\/\/geekcommunicant.com\/blog\/2013\/08\/11\/amusons-nous-avec-les-canvas\/","url_meta":{"origin":1354,"position":4},"title":"[JavaScript\/HTML5] Amusons-nous avec les canvas","author":"geekc","date":"11\/08\/2013","format":false,"excerpt":"Aujourd'hui nous allons voir comment ajouter du texte aux nouveaux \u00e9l\u00e9ments <canvas> du HTML5. Comme les plus attentifs d'entre-vous l'auront d\u00e9j\u00e0 remarqu\u00e9, le titre de l'article r\u00e9v\u00e8le d\u00e9j\u00e0 une partie du contenu de l'article ; effectivement, pour utiliser les canvas, il faut obligatoirement passer par JavaScript. Le HTML La d\u00e9claration\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":148,"url":"https:\/\/geekcommunicant.com\/blog\/2012\/10\/04\/jquery-une-horloge-en-image\/","url_meta":{"origin":1354,"position":5},"title":"[jQuery] Une horloge en image","author":"geekc","date":"04\/10\/2012","format":false,"excerpt":"Aujourd'hui, nous allons voir comment r\u00e9aliser en jQuery une horloge utilisant des images, que vous pouvez voir en action ici. Avant de commencer Pour des raisons de practicit\u00e9, nous allons utiliser les images utilis\u00e9es par le compteur de Gelbooru, que j'ai rassembl\u00e9es dans cette archive. La structure HTML Avant tout,\u2026","rel":"","context":"Dans &quot;jQuery&quot;","block_context":{"text":"jQuery","link":"https:\/\/geekcommunicant.com\/blog\/category\/jquery\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/comments?post=1354"}],"version-history":[{"count":4,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1354\/revisions"}],"predecessor-version":[{"id":1358,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1354\/revisions\/1358"}],"wp:attachment":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/media?parent=1354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/categories?post=1354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/tags?post=1354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}