{"id":1032,"date":"2019-02-05T16:50:17","date_gmt":"2019-02-05T15:50:17","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?p=1032"},"modified":"2024-06-09T17:07:53","modified_gmt":"2024-06-09T15:07:53","slug":"chiffrement-de-hill-en-python","status":"publish","type":"post","link":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/","title":{"rendered":"Chiffrement de Hill en Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Nous allons encore une fois parler cryptographie dans cet article. Dans l&rsquo;article pr\u00e9c\u00e9dent, je vous parlais du <a href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/01\/creer-un-executable-sous-windows-a-partir-dun-programme-python\/\">chiffrement affine<\/a>, le chiffrement le plus nul apr\u00e8s le chiffrement de C\u00e9sar, mais cette fois-ci, on va lever le niveau&#8230;<\/p>\n\n\n\n<!--more-->\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Au menu sur cette page...<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Les_prerequis\" >Les pr\u00e9requis<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Condition_necessaire_et_suffisante\" >Condition n\u00e9cessaire et suffisante<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Principe_du_chiffrement\" >Principe du chiffrement<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Premiere_etape\" >Premi\u00e8re \u00e9tape<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Deuxieme_etape\" >Deuxi\u00e8me \u00e9tape<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Troisieme_etape\" >Troisi\u00e8me \u00e9tape<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Quatrieme_etape\" >Quatri\u00e8me \u00e9tape<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Principe_du_dechiffrement\" >Principe du d\u00e9chiffrement<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Premiere_etape-2\" >Premi\u00e8re \u00e9tape<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Deuxieme_etape-2\" >Deuxi\u00e8me \u00e9tape<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Troisieme_etape-2\" >Troisi\u00e8me \u00e9tape<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Quatrieme_etape-2\" >Quatri\u00e8me \u00e9tape<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Resultat_en_Python\" >R\u00e9sultat en Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#Telechargement_des_fichiers\" >T\u00e9l\u00e9chargement des fichiers<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Les_prerequis\"><\/span>Les pr\u00e9requis<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour chiffrer un message avec cette m\u00e9thode, il nous faudra conna\u00eetre les matrices ainsi que les op\u00e9rations de base qui s&rsquo;y rapportent, mais aussi la notion de modulo&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons nous bas\u00e9 sur un alphabet (un ensemble constitu\u00e9 d&rsquo;un certain nombre de caract\u00e8res). Pour ma part, j&rsquo;ai pris :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">alphabet=[\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',\"'\",\"\u00f9\",\"\u00e9\",\"\u00e8\",\"\u00e0\",\"\u00e7\",\"-\",\"\u00ea\",\" \",\".\"]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">De plus, comme il y a pas mal de calculs d&rsquo;alg\u00e8bre lin\u00e9aires, j&rsquo;utilise le module <em>numpy<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Condition_necessaire_et_suffisante\"><\/span>Condition n\u00e9cessaire et suffisante<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La cl\u00e9 de chiffrement est une matrice. Pour pouvoir chiffrer, et surtout d\u00e9chiffrer, il faut que le d\u00e9terminant de cette matrice ait un inverse modulo le nombre de caract\u00e8res de notre alphabet. Il faut donc, apr\u00e8s saisie de la matrice, tester cette condition. Rappelons que le d\u00e9terminant (que je vais noter <em>d<\/em>) est inversible modulo <em>n<\/em> s&rsquo;il existe un entier <em>x<\/em> compris entre 0 et <em>n<\/em>-1 tel que <em>dx<\/em> = 1 mod <em>n<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De plus, le message \u00e0 chiffrer doit comporter un nombre de caract\u00e8res multiple de la dimension de la matrice (qui doit \u00eatre carr\u00e9e). Donc ici, deux possibilit\u00e9s : <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>soit on demande \u00e0 l&rsquo;utilisateur un message ayant un nombre convenable de caract\u00e8res, ce qui n&rsquo;est pas tr\u00e8s pratique,<\/li>\n\n\n\n<li>soit on compl\u00e8te le message par des espaces vides afin que le nombre de caract\u00e8res soit au final un multiple de la dimension de la matrice.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est la seconde solution que j&rsquo;utilise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Principe_du_chiffrement\"><\/span>Principe du chiffrement<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour faire simple, je vais prendre une matrice \\(2\\times2\\), par exemple : $$A=\\begin{pmatrix}3&amp;7\\\\2&amp;13\\end{pmatrix}$$et un mot de deux lettres, par exemple \u00ab\u00a0MA\u00a0\u00bb.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Premiere_etape\"><\/span>Premi\u00e8re \u00e9tape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;attribue \u00e0 chaque lettre de mon mot un nombre (le rang de la lettre dans l&rsquo;alphabet). Donc ici, \u00ab\u00a0M\u00a0\u00bb correspond \u00e0 12  et \u00ab\u00a0A\u00a0\u00bb, \u00e0 \u00ab\u00a00\u00a0\u00bb. Je cr\u00e9\u00e9 ainsi un vecteur:$$V=\\begin{pmatrix}12\\\\0\\end{pmatrix}.$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Deuxieme_etape\"><\/span>Deuxi\u00e8me \u00e9tape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Je multiplie la matrice-cl\u00e9 par le vecteur ainsi obtenu:$$\\begin{pmatrix}3&amp;7\\\\2&amp;13\\end{pmatrix}\\begin{pmatrix}12\\\\0\\end{pmatrix}=\\begin{pmatrix}36\\\\24\\end{pmatrix}.$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Troisieme_etape\"><\/span>Troisi\u00e8me \u00e9tape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Je prend les coefficients du r\u00e9sultat modulo le nombre de caract\u00e8res dans l&rsquo;alphabet. Comme ici c&rsquo;est 62, \u00e7a ne change rien aux nombres obtenus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quatrieme_etape\"><\/span>Quatri\u00e8me \u00e9tape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Je convertis les nombres en caract\u00e8res en prenant les lettres qui correspondent aux rangs obtenus. Ici, 36 correspond au caract\u00e8re \u00ab\u00a0k\u00a0\u00bb, et 24 \u00e0 la lettre \u00ab\u00a0Y\u00a0\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le message chiffr\u00e9 est alors : \u00ab\u00a0kY\u00a0\u00bb.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Principe_du_dechiffrement\"><\/span>Principe du d\u00e9chiffrement<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il est le m\u00eame que celui du chiffrement, en prenant comme matrice l&rsquo;inverse modulo <em>n<\/em> de la matrice de chiffrement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Premiere_etape-2\"><\/span>Premi\u00e8re \u00e9tape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On calcule le d\u00e9terminant de la matrice de chiffrement A. Pour mon exemple, on trouve :$$\\det A=25.$$<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, on exprime la matrice inverse sous la forme :$$A^{-1}=\\frac{1}{\\det A}B$$o\u00f9 \\(B\\) doit \u00eatre trouv\u00e9e. Pour nous,$$A^{-1}=\\frac{1}{25}\\begin{pmatrix}13&amp;-7\\\\-2&amp;3\\end{pmatrix}.$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Deuxieme_etape-2\"><\/span>Deuxi\u00e8me \u00e9tape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On cherche l&rsquo;inverse du d\u00e9terminant modulo le nombre de caract\u00e8res dans l&rsquo;alphabet. On cherche donc ici l&rsquo;inverse de 25 modulo 62. On trouve 5 car \\(25\\times5=125=1\\mod 62\\).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donc on peut \u00e9crire:$$A^{-1}=5\\begin{pmatrix}13&amp;-7\\\\-2&amp;3\\end{pmatrix}.$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Troisieme_etape-2\"><\/span>Troisi\u00e8me \u00e9tape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On calcule modulo le nombre de caract\u00e8res dans l&rsquo;alphabet les coefficients de la matrice inverse. Ici, on obtiens :$$A^{-1}=\\begin{pmatrix}65&amp;-35\\\\-10&amp;15\\end{pmatrix}\\equiv\\begin{pmatrix}3&amp;27\\\\52&amp;15\\end{pmatrix}\\mod62.$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quatrieme_etape-2\"><\/span>Quatri\u00e8me \u00e9tape<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On chiffre le message chiffr\u00e9 \u00e0 l&rsquo;aide de la matrice inverse. Donc ici, si on part du message \u00ab\u00a0kY\u00a0\u00bb, qui correspond au vecteur \\(\\binom{36}{24}\\), on a :$$\\begin{pmatrix}3&amp;27\\\\52&amp;15\\end{pmatrix}\\begin{pmatrix}36\\\\24\\end{pmatrix}=\\begin{pmatrix}756\\\\2232\\end{pmatrix}\\equiv\\begin{pmatrix}12\\\\0\\end{pmatrix}\\mod62.$$On retrouve bien le rang des lettres \u00ab\u00a0M\u00a0\u00bb et \u00ab\u00a0A\u00a0\u00bb.<span style=\"background-color: #e8eaeb;\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Resultat_en_Python\"><\/span>R\u00e9sultat en Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai ici converti en fichier ex\u00e9cutable le programme Python, et voici les captures d&rsquo;\u00e9cran:<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"512\" data-id=\"1034\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png\" alt=\"\" class=\"wp-image-1034\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png 979w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01-300x157.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01-600x314.png 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01-768x402.png 768w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill02.png\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"512\" data-id=\"1035\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill02.png\" alt=\"\" class=\"wp-image-1035\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill02.png 979w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill02-300x157.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill02-600x314.png 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill02-768x402.png 768w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill03.png\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"512\" data-id=\"1036\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill03.png\" alt=\"\" class=\"wp-image-1036\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill03.png 979w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill03-300x157.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill03-600x314.png 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill03-768x402.png 768w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill04.png\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"512\" data-id=\"1037\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill04.png\" alt=\"\" class=\"wp-image-1037\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill04.png 979w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill04-300x157.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill04-600x314.png 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill04-768x402.png 768w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill05.png\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"512\" data-id=\"1038\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill05.png\" alt=\"\" class=\"wp-image-1038\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill05.png 979w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill05-300x157.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill05-600x314.png 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill05-768x402.png 768w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill06.png\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"512\" data-id=\"1039\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill06.png\" alt=\"\" class=\"wp-image-1039\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill06.png 979w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill06-300x157.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill06-600x314.png 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill06-768x402.png 768w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Telechargement_des_fichiers\"><\/span>T\u00e9l\u00e9chargement des fichiers<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai mis tous les fichiers dans un ZIP ci-dessous. Pour ex\u00e9cuter directement le programme, double-cliquez sur le fichier <em>Hill.py.<\/em><\/p>\n\n\n\n<div class=\"wp-block-file aligncenter um_article\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/chiffrement-de-Hill.zip\">chiffrement de Hill<\/a><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/chiffrement-de-Hill.zip\" class=\"wp-block-file__button wp-element-button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Nous allons encore une fois parler cryptographie dans cet article. Dans l&rsquo;article pr\u00e9c\u00e9dent, je vous parlais du chiffrement affine, le chiffrement le plus nul apr\u00e8s le chiffrement de C\u00e9sar, mais cette fois-ci, on va lever le niveau&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,5],"tags":[],"class_list":["post-1032","post","type-post","status-publish","format-standard","hentry","category-mathematiques","category-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Chiffrement de Hill en Python - Mathweb.fr<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chiffrement de Hill en Python - Mathweb.fr\" \/>\n<meta property=\"og:description\" content=\"Nous allons encore une fois parler cryptographie dans cet article. Dans l&rsquo;article pr\u00e9c\u00e9dent, je vous parlais du chiffrement affine, le chiffrement le plus nul apr\u00e8s le chiffrement de C\u00e9sar, mais cette fois-ci, on va lever le niveau&#8230;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-05T15:50:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-09T15:07:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png\" \/>\n<meta name=\"author\" content=\"St\u00e9phane Pasquet\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"St\u00e9phane Pasquet\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/\"},\"author\":{\"name\":\"St\u00e9phane Pasquet\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"headline\":\"Chiffrement de Hill en Python\",\"datePublished\":\"2019-02-05T15:50:17+00:00\",\"dateModified\":\"2024-06-09T15:07:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/\"},\"wordCount\":731,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/Hill01.png\",\"articleSection\":[\"Math\u00e9matiques\",\"Python\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/\",\"name\":\"Chiffrement de Hill en Python - Mathweb.fr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/Hill01.png\",\"datePublished\":\"2019-02-05T15:50:17+00:00\",\"dateModified\":\"2024-06-09T15:07:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/Hill01.png\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/Hill01.png\",\"width\":979,\"height\":512},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2019\\\/02\\\/05\\\/chiffrement-de-hill-en-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chiffrement de Hill en Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\",\"name\":\"Mathweb.fr\",\"description\":\"Math\u00e9matiques, LaTeX et Python\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\",\"name\":\"St\u00e9phane Pasquet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"width\":74,\"height\":77,\"caption\":\"St\u00e9phane Pasquet\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Chiffrement de Hill en Python - Mathweb.fr","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Chiffrement de Hill en Python - Mathweb.fr","og_description":"Nous allons encore une fois parler cryptographie dans cet article. Dans l&rsquo;article pr\u00e9c\u00e9dent, je vous parlais du chiffrement affine, le chiffrement le plus nul apr\u00e8s le chiffrement de C\u00e9sar, mais cette fois-ci, on va lever le niveau&#8230;","og_url":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/","og_site_name":"Mathweb.fr","article_published_time":"2019-02-05T15:50:17+00:00","article_modified_time":"2024-06-09T15:07:53+00:00","og_image":[{"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png","type":"","width":"","height":""}],"author":"St\u00e9phane Pasquet","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"St\u00e9phane Pasquet","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#article","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/"},"author":{"name":"St\u00e9phane Pasquet","@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"headline":"Chiffrement de Hill en Python","datePublished":"2019-02-05T15:50:17+00:00","dateModified":"2024-06-09T15:07:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/"},"wordCount":731,"commentCount":1,"publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png","articleSection":["Math\u00e9matiques","Python"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/","name":"Chiffrement de Hill en Python - Mathweb.fr","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png","datePublished":"2019-02-05T15:50:17+00:00","dateModified":"2024-06-09T15:07:53+00:00","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2019\/02\/Hill01.png","width":979,"height":512},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"Chiffrement de Hill en Python"}]},{"@type":"WebSite","@id":"https:\/\/www.mathweb.fr\/euclide\/#website","url":"https:\/\/www.mathweb.fr\/euclide\/","name":"Mathweb.fr","description":"Math\u00e9matiques, LaTeX et Python","publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mathweb.fr\/euclide\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69","name":"St\u00e9phane Pasquet","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","width":74,"height":77,"caption":"St\u00e9phane Pasquet"},"logo":{"@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp"}}]}},"_links":{"self":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/1032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/comments?post=1032"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/1032\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=1032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/categories?post=1032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/tags?post=1032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}