{"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>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&#8217;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_83 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&#8217;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>Je souhaite incruster les lettres &#8220;AB&#8221; dans l&#8217;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>Il faut d&#8217;abord que j&#8217;obtienne le code ASCII de chaque caract\u00e8re. On l&#8217;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>Il nous faut un octet donc on supprime le &#8216;0b&#8217;:<\/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>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>Vous le savez peut-\u00eatre, une image est compos\u00e9e de 3 ou 4 couches; on va simplifier en disant qu&#8217;elle contient 3 niveaux de couleurs : rouge, vert et bleu. On va donc, pour chaque pixel de l&#8217;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 &#8220;0&#8221; est associ\u00e9 \u00e0 37, on va arrondir \u00e0 36 et s&#8217;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>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&#8217;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&#8217;arrondi au nombre pair inf\u00e9rieur ou \u00e9gal;<\/li><li>quatri\u00e8me ligne : repr\u00e9sente les deux octets correspondant \u00e0 &#8216;A&#8217; et &#8216;B&#8217; (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&#8217;image finale, que l&#8217;on appelle g\u00e9n\u00e9ralement la <em>couverture<\/em>.<\/li><\/ul>\n\n\n\n<p>Ainsi, \u00e0 l\u2019\u0153il nu, on ne remarque aucune alt\u00e9ration de l&#8217;image puisque l&#8217;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&#8217;aide de PIL<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>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&#8217;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>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>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>le message est incrust\u00e9 dans l&#8217;image et la couverture est sauvegard\u00e9e sous le nom &#8220;couv_grand_pere_a_la_plage.png&#8221;.<\/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>\u00c0 noter que n&#8217;importe qui peut obtenir le message&#8230; Ce n&#8217;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>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&#8217;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 v27.6 - 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}]}}