{"id":2699,"date":"2020-06-13T16:31:41","date_gmt":"2020-06-13T14:31:41","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?p=2699"},"modified":"2020-10-03T15:49:56","modified_gmt":"2020-10-03T13:49:56","slug":"steganographie-python","status":"publish","type":"post","link":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/","title":{"rendered":"St\u00e9ganographie et Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">La <em><a href=\"https:\/\/fr.wikipedia.org\/wiki\/St%C3%A9ganographie\" target=\"_blank\" rel=\"noreferrer noopener\">st\u00e9ganographie<\/a><\/em> consiste \u00e0 dissimuler un message dans un autre message. Dans cet article nous verrons une fa\u00e7on de dissimuler un texte dans une image \u00e0 l&rsquo;aide de Python.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"490\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python.png\" alt=\"St\u00e9ganographie avec Python\" class=\"wp-image-2700\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python.png 738w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python-300x199.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python-600x398.png 600w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><figcaption>St\u00e9ganographie avec Python<\/figcaption><\/figure><\/div>\n\n\n\n<!--more-->\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87 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\/2020\/06\/13\/steganographie-python\/#Une_methode_de_steganographie_en_Python\" >Une m\u00e9thode de st\u00e9ganographie en Python<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#Code_ASCII_des_caracteres\" >Code ASCII des caract\u00e8res<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#Separation_des_niveaux_de_couleurs\" >S\u00e9paration des niveaux de couleurs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#Transformation_de_la_valeur\" >Transformation de la valeur<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#Steganographie_en_Python_a_laide_de_PIL\" >St\u00e9ganographie en Python \u00e0 l&rsquo;aide de PIL<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#Incruster_un_message_dans_une_image_steganographie_python\" >Incruster un message dans une image (st\u00e9ganographie python)<\/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\/2020\/06\/13\/steganographie-python\/#Obtention_du_message\" >Obtention du message<\/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\/2020\/06\/13\/steganographie-python\/#Un_module_pour_la_steganographie\" >Un module pour la st\u00e9ganographie<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Une_methode_de_steganographie_en_Python\"><\/span>Une m\u00e9thode de st\u00e9ganographie en Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je souhaite incruster les lettres \u00ab\u00a0AB\u00a0\u00bb dans l&rsquo;image.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Code_ASCII_des_caracteres\"><\/span>Code ASCII des caract\u00e8res<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Il faut d&rsquo;abord que j&rsquo;obtienne le code ASCII de chaque caract\u00e8re. On l&rsquo;obtient en Python avec la commande :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">bin( ord( 'A' ) ) # donne : '0b1000001'\nbin( ord( 'B' ) ) # donne : '0b1000010'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il nous faut un octet donc on supprime le &lsquo;0b&rsquo;:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">bin( ord( 'A' ) )[2:] # donne : '1000001'\nbin( ord( 'B' ) )[2:] # donne : '1000010'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il nous faut encore formater de sorte \u00e0 bien avoir 8 binaires :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">bin( ord( 'A' ) )[2:].rjust(8,'0') # donne : '01000001'\nbin( ord( 'B' ) )[2:].rjust(8,'0') # donne : '01000010'<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Separation_des_niveaux_de_couleurs\"><\/span>S\u00e9paration des niveaux de couleurs<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vous le savez peut-\u00eatre, une image est compos\u00e9e de 3 ou 4 couches; on va simplifier en disant qu&rsquo;elle contient 3 niveaux de couleurs : rouge, vert et bleu. On va donc, pour chaque pixel de l&rsquo;image, r\u00e9cup\u00e9rer le nombre associ\u00e9 au niveau rouge (par exemple), puis prendre le nombre pair qui lui est inf\u00e9rieur ou \u00e9gal (si le pixel \u00ab\u00a00\u00a0\u00bb est associ\u00e9 \u00e0 37, on va arrondir \u00e0 36 et s&rsquo;il est associ\u00e9 \u00e0 42, on garde 42). Pour chaque pixel, je vais noter R[<em>i<\/em>] le r\u00e9sultat obtenu pour le pixel <em>i<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Transformation_de_la_valeur\"><\/span>Transformation de la valeur<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un tableau est pr\u00e9f\u00e9rable pour expliquer, car l\u00e0, \u00e7a devient chiant \u00e0 d\u00e9crire avec des mots ce qui se passe :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Pixel<\/td><td>1<\/td><td>2<\/td><td>3<\/td><td>4<\/td><td>5<\/td><td>6<\/td><td>7<\/td><td>8<\/td><td>9<\/td><td>10<\/td><td>11<\/td><td>12<\/td><td>13<\/td><td>14<\/td><td>15<\/td><td>16<\/td><\/tr><tr><td>Image<\/td><td>30<\/td><td>71<\/td><td>25<\/td><td>20<\/td><td>10<\/td><td>152<\/td><td>15<\/td><td>96<\/td><td>18<\/td><td>20<\/td><td>20<\/td><td>20<\/td><td>20<\/td><td>87<\/td><td>15<\/td><td>101<\/td><\/tr><tr><td>R\u00e9duction<\/td><td>30<\/td><td>70<\/td><td>24<\/td><td>20<\/td><td>10<\/td><td>152<\/td><td>14<\/td><td>96<\/td><td>18<\/td><td>20<\/td><td>20<\/td><td>20<\/td><td>20<\/td><td>86<\/td><td>14<\/td><td>100<\/td><\/tr><tr><td>Binaire<\/td><td>0<\/td><td>1<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>1<\/td><td>0<\/td><td>1<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>0<\/td><td>1<\/td><td>0<\/td><\/tr><tr><td>Couverture<\/td><td>30<\/td><td>71<\/td><td>24<\/td><td>20<\/td><td>10<\/td><td>152<\/td><td>14<\/td><td>97<\/td><td>18<\/td><td>21<\/td><td>20<\/td><td>20<\/td><td>20<\/td><td>86<\/td><td>15<\/td><td>100<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>premi\u00e8re ligne : repr\u00e9sente le num\u00e9ro du pixel de l&rsquo;image;<\/li><li>deuxi\u00e8me ligne : repr\u00e9sente le nombre associ\u00e9 au pixel <em>i<\/em> sur le niveau de rouge;<\/li><li>troisi\u00e8me ligne : repr\u00e9sente l&rsquo;arrondi au nombre pair inf\u00e9rieur ou \u00e9gal;<\/li><li>quatri\u00e8me ligne : repr\u00e9sente les deux octets correspondant \u00e0 &lsquo;A&rsquo; et &lsquo;B&rsquo; (le message \u00e0 incruster);<\/li><li>derni\u00e8re ligne : repr\u00e9sente la somme des lignes 3 et 4, qui donne le nombre attribu\u00e9 au pixel <em>i<\/em> sur la couche rouge dans l&rsquo;image finale, que l&rsquo;on appelle g\u00e9n\u00e9ralement la <em>couverture<\/em>.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ainsi, \u00e0 l\u2019\u0153il nu, on ne remarque aucune alt\u00e9ration de l&rsquo;image puisque l&rsquo;on ajoute uniquement 1 (au maximum) sur une seule couche.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Steganographie_en_Python_a_laide_de_PIL\"><\/span>St\u00e9ganographie en Python \u00e0 l&rsquo;aide de PIL<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La premi\u00e8re chose \u00e0 savoir est que nous allons manipuler des images en Python et donc utiliser le module PIL. Il faut alors l&rsquo;installer. Dans un terminal, taper (je suis sous Python 3.8+) :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install Pillow<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Incruster_un_message_dans_une_image_steganographie_python\"><\/span>Incruster un message dans une image (st\u00e9ganographie python)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Voici la d\u00e9finition de la fonction:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from PIL import Image\n\ndef stegano(name_img , msg):\n    im = Image.open(name_img)\n    # on r\u00e9cup\u00e8re les dimensions de l'image\n    w , h = im.size\n\n    # on s\u00e9pare l'image en trois : rouge, vert et bleu\n    r , g , b = im.split()\n\n    # on transforme la partie rouge en liste\n    r = list( r.getdata() )\n\n    # on calcule la longueur de la cha\u00eene et on la transforme en binaire\n    u = len(msg)\n    v = bin( len(msg) )[2:].rjust(8,\"0\")\n\n    # on transforme la cha\u00eene en une liste de 0 et de 1 \n    ascii = [ bin(ord(x))[2:].rjust(8,\"0\") for x in msg ]\n\n    # transformation de la liste en cha\u00eene\n    a = ''.join(ascii)\n\n    # on code la longueur de la liste dans les 8 premiers pixels rouges\n    for j in range(8):\n        r[j] = 2 * int( r[j] \/\/ 2 ) + int( v[j] )\n\n    # on code la cha\u00eene dans les pixels suivants\n    for i in range(8*u):\n        r[i+8] = 2 * int( r[i+8] \/\/ 2 ) + int( a[i] )\n        \n    # on recr\u00e9e l'image rouge \n    nr = Image.new(\"L\",(16*w,16*h))\n    nr = Image.new(\"L\",(w,h))\n    nr.putdata(r)\n\n    # fusion des trois nouvelles images\n    imgnew = Image.merge('RGB',(nr,g,b))\n    new_name_img = \"couv_\" + name_img\n    imgnew.save(new_name_img)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En tapant:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">stegano(\"grand_pere_a_la_plage.png\" , \"Il a mang\u00e9 trop de cassoulet !\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">le message est incrust\u00e9 dans l&rsquo;image et la couverture est sauvegard\u00e9e sous le nom \u00ab\u00a0couv_grand_pere_a_la_plage.png\u00a0\u00bb.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Obtention_du_message\"><\/span>Obtention du message<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def get_msg(name_couv):\n    im = Image.open(name_couv)\n    r , g , b = im.split()\n    r = list( r.getdata() )\n    \n    # lecture de la longueur de la chaine\n    p = [ str(x%2) for x in r[0:8] ]\n    q = \"\".join(p)\n    q = int(q,2)\n    \n    # lecture du message\n    n = [ str(x%2) for x in r[8:8*(q+1)] ]\n\n    b = \"\".join(n)\n    message = \"\"\n\n    for k in range(0,q):\n        l = b[8*k:8*k+8]\n        message += chr(int(l,2))\n        \n    return message<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 noter que n&rsquo;importe qui peut obtenir le message&#8230; Ce n&rsquo;est donc pas tr\u00e8s s\u00e9curis\u00e9. Cette technique est donc \u00e0 coupler avec une technique de <a rel=\"noreferrer noopener\" href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/\" target=\"_blank\">cryptographie<\/a> pour chiffrer et d\u00e9chiffrer le message&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Un_module_pour_la_steganographie\"><\/span>Un module pour la st\u00e9ganographie<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si tout ceci vous para\u00eet trop compliqu\u00e9, autant utiliser le module <em><a href=\"https:\/\/pypi.org\/project\/steganocryptopy\/\" target=\"_blank\" rel=\"noreferrer noopener\">steganocryptopy<\/a><\/em>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La st\u00e9ganographie consiste \u00e0 dissimuler un message dans un autre message. Dans cet article nous verrons une fa\u00e7on de dissimuler un texte dans une image \u00e0 l&rsquo;aide de Python.<\/p>\n","protected":false},"author":1,"featured_media":3730,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[196,214],"class_list":["post-2699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatique","category-python","tag-image","tag-steganographie"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>St\u00e9ganographie et Python - Mathweb.fr - Comprendre avec un exemple<\/title>\n<meta name=\"description\" content=\"Nous allons voir une m\u00e9thode de st\u00e9ganographie python qui consiste \u00e0 dissimuler un texte dans une image \u00e0 travers un exemple.\" \/>\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\/2020\/06\/13\/steganographie-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"St\u00e9ganographie et Python - Mathweb.fr - Comprendre avec un exemple\" \/>\n<meta property=\"og:description\" content=\"Nous allons voir une m\u00e9thode de st\u00e9ganographie python qui consiste \u00e0 dissimuler un texte dans une image \u00e0 travers un exemple.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-13T14:31:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-03T13:49:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"740\" \/>\n\t<meta property=\"og:image:height\" content=\"198\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/\"},\"author\":{\"name\":\"St\u00e9phane Pasquet\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"headline\":\"St\u00e9ganographie et Python\",\"datePublished\":\"2020-06-13T14:31:41+00:00\",\"dateModified\":\"2020-10-03T13:49:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/\"},\"wordCount\":487,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/steganographie-python.jpg\",\"keywords\":[\"image\",\"st\u00e9ganographie\"],\"articleSection\":[\"Informatique\",\"Python\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/\",\"name\":\"St\u00e9ganographie et Python - Mathweb.fr - Comprendre avec un exemple\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/steganographie-python.jpg\",\"datePublished\":\"2020-06-13T14:31:41+00:00\",\"dateModified\":\"2020-10-03T13:49:56+00:00\",\"description\":\"Nous allons voir une m\u00e9thode de st\u00e9ganographie python qui consiste \u00e0 dissimuler un texte dans une image \u00e0 travers un exemple.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/steganographie-python.jpg\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/steganographie-python.jpg\",\"width\":740,\"height\":198,\"caption\":\"st\u00e9ganographie python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/13\\\/steganographie-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"St\u00e9ganographie et 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":"St\u00e9ganographie et Python - Mathweb.fr - Comprendre avec un exemple","description":"Nous allons voir une m\u00e9thode de st\u00e9ganographie python qui consiste \u00e0 dissimuler un texte dans une image \u00e0 travers un exemple.","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\/2020\/06\/13\/steganographie-python\/","og_locale":"fr_FR","og_type":"article","og_title":"St\u00e9ganographie et Python - Mathweb.fr - Comprendre avec un exemple","og_description":"Nous allons voir une m\u00e9thode de st\u00e9ganographie python qui consiste \u00e0 dissimuler un texte dans une image \u00e0 travers un exemple.","og_url":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/","og_site_name":"Mathweb.fr","article_published_time":"2020-06-13T14:31:41+00:00","article_modified_time":"2020-10-03T13:49:56+00:00","og_image":[{"width":740,"height":198,"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python.jpg","type":"image\/jpeg"}],"author":"St\u00e9phane Pasquet","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"St\u00e9phane Pasquet","Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#article","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/"},"author":{"name":"St\u00e9phane Pasquet","@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"headline":"St\u00e9ganographie et Python","datePublished":"2020-06-13T14:31:41+00:00","dateModified":"2020-10-03T13:49:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/"},"wordCount":487,"commentCount":0,"publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python.jpg","keywords":["image","st\u00e9ganographie"],"articleSection":["Informatique","Python"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/","name":"St\u00e9ganographie et Python - Mathweb.fr - Comprendre avec un exemple","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python.jpg","datePublished":"2020-06-13T14:31:41+00:00","dateModified":"2020-10-03T13:49:56+00:00","description":"Nous allons voir une m\u00e9thode de st\u00e9ganographie python qui consiste \u00e0 dissimuler un texte dans une image \u00e0 travers un exemple.","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python.jpg","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/steganographie-python.jpg","width":740,"height":198,"caption":"st\u00e9ganographie python"},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"St\u00e9ganographie et 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\/2699","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=2699"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/2699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media\/3730"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=2699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/categories?post=2699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/tags?post=2699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}