{"id":3572,"date":"2020-09-18T13:23:49","date_gmt":"2020-09-18T11:23:49","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?p=3572"},"modified":"2020-10-03T14:57:28","modified_gmt":"2020-10-03T12:57:28","slug":"hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python","status":"publish","type":"post","link":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/","title":{"rendered":"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hacker un fichier compress\u00e9 au format 7z, prot\u00e9g\u00e9 par un mot de passe, en Python est en th\u00e9orie faisable. Mais en pratique, vous allez voir que pour une personne lambda, c&rsquo;est rarement faisable&#8230;<\/p>\n\n\n\n<!--more-->\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"717\" height=\"398\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python.jpg\" alt=\"hack 7z python\" class=\"wp-image-3573\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python.jpg 717w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python-600x333.jpg 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python-300x167.jpg 300w\" sizes=\"auto, (max-width: 717px) 100vw, 717px\" \/><\/figure><\/div>\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\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Hacker_un_fichier_7z_en_Python_par_force_brute_le_principe\" >Hacker un fichier 7z en Python par force brute: le principe<\/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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Introduction_pour_hacker_un_fichier_7z_en_Python\" >Introduction pour hacker un fichier 7z en Python<\/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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Cest_quoi_la_force_brute\" >C&rsquo;est quoi la force brute ?<\/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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Nombre_de_produits_cartesiens_interlude_mathematiques\" >Nombre de produits cart\u00e9siens: interlude math\u00e9matiques<\/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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Hacker_un_fichier_7z_en_Python_par_force_brute_la_pratique\" >Hacker un fichier 7z en Python par force brute: la pratique<\/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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Un_programme\" >Un programme<\/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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Que_faut_le_programme\" >Que faut le programme ?<\/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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Hacker_un_fichier_7z_en_Python_une_autre_methode\" >Hacker un fichier 7z en Python: une autre m\u00e9thode<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#Conclusion\" >Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Hacker_un_fichier_7z_en_Python_par_force_brute_le_principe\"><\/span>Hacker un fichier 7z en Python par force brute: le principe<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Introduction_pour_hacker_un_fichier_7z_en_Python\"><\/span>Introduction pour hacker un fichier 7z en Python<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A priori, le fichier 7z que l&rsquo;on doit hacker est prot\u00e9g\u00e9 par un mot de passe dont on ignore tout : longueur, alphabet utilis\u00e9 (c&rsquo;est-\u00e0-dire caract\u00e8res qui apparaissent dans le mot de passe). Bref, c&rsquo;est la merde !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En effet, il faut se baser sur un alphabet le plus large possible!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En Python, on va donc se baser sur l&rsquo;alphabet suivant:<\/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=\"\">alphabet = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&amp;*()-_+=~`[]{}:;\\\"'&lt;>,.?\/\\\\\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Les lettres majuscules et minuscules de l&rsquo;alphabet latin, les chiffres et les caract\u00e8res sp\u00e9ciaux disponibles au clavier (on va supposer que c&rsquo;est suffisant), soit 93 caract\u00e8res&#8230; Rien que \u00e7a !<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Cest_quoi_la_force_brute\"><\/span>C&rsquo;est quoi la force brute ?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La <em>force brute<\/em> consiste \u00e0 essayer un \u00e0 un tous les \u00ab\u00a0mots\u00a0\u00bb possibles que l&rsquo;on peut former \u00e0 partir de notre alphabet&#8230; Et il y en a un bon paquet!<\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>May the brute force be with you !<\/p><cite>Obi-wan Kenobi<\/cite><\/blockquote><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9j\u00e0, il faut tester tous les mots de 1 lettre, soit 93 possibilit\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, il faut tester tous les mots de 2 lettres que l&rsquo;on peut former sur un alphabet de 93 lettres, soit 93\u00b2 = 8649 possibilit\u00e9s. Il s&rsquo;agit ici de <em>produits cart\u00e9siens<\/em> (on dit aussi une 2-liste sur un ensemble de 93 \u00e9l\u00e9ments).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Nombre_de_produits_cartesiens_interlude_mathematiques\"><\/span>Nombre de produits cart\u00e9siens: interlude math\u00e9matiques<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Quand on dispose d&rsquo;un alphabet de <em>n<\/em> lettres et que l&rsquo;on souhaite savoir combien de mots de <em>p<\/em> lettres on peut faire sur cet alphabet, on utilise la formule:$$n^p.$$<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Hacker_un_fichier_7z_en_Python_par_force_brute_la_pratique\"><\/span>Hacker un fichier 7z en Python par force brute: la pratique<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans la pratique, on ne sait pas combien de lettres comporte le mot de passe. Il faut donc tous les tester.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notre programme doit donc partir d&rsquo;une longueur de 2 (on suppose que le mot de passe n&rsquo;est pas compos\u00e9 uniquement d&rsquo;un caract\u00e8re) et tester toutes les 2-listes. Si le mot de passe n&rsquo;a pas \u00e9t\u00e9 trouv\u00e9, on passe \u00e0 toutes les 3-listes. On continue ainsi jusqu&rsquo;\u00e0 trouver le mot de passe.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Un_programme\"><\/span>Un programme<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On va se servir du module <em>itertools<\/em> et de sa fonction <em>product<\/em>. On va aussi se servir du module <em>py7zr<\/em> qui permet, entre autre, de d\u00e9compresser un fichier 7z.<\/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 py7zr import SevenZipFile\nfrom itertools import product\n\nalphabet = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&amp;*()-_+=~`[]{}:;\\\"'&lt;>,.?\/\\\\\"\n\nlongueur = 2\nfind = False\n    \nwhile find == False:\n   liste = [ ''.join(i) for i in list(product(alphabet, repeat=longueur)) ]\n    for pwd in liste:\n        try:\n            archive = SevenZipFile(r'monfichier.7z', mode='r', password = pwd)\n            archive.extractall()\n            archive.close()\n            find = True\n        except:\n            pass\n    \n    longueur += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;utilise ici un bool\u00e9en <em>find<\/em> (ligne 7) qui est nativement False et qui va me servir pour indiquer si le mot de passe est trouv\u00e9 par la suite (auquel cas, il passera \u00e0 True.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je cr\u00e9\u00e9 donc une boucle conditionnelle <em>while<\/em> (ligne 9) sur ce bool\u00e9en. Tant que le mot de passe n&rsquo;est pas trouv\u00e9, j&rsquo;ex\u00e9cute ce qui suit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je d\u00e9finis une variable <em>liste<\/em> qui est la liste de toutes les produits cart\u00e9siens possibles de taille <em>longueur<\/em> (qui s&rsquo;incr\u00e9mentera au fil des essais) sur notre alphabet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par d\u00e9faut, le r\u00e9sultat est une liste de couple. Par exemple,<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt;&gt;&gt; list(product(\"ABCD\", repeat=2))\n[('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('B', 'D'), ('C', 'A'), ('C', 'B'), ('C', 'C'), ('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C'), ('D', 'D')]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n&rsquo;est pas ce que l&rsquo;on veut : il faut une liste de mots, donc je construis <em>par compr\u00e9hension<\/em> ma liste en utilisant la m\u00e9thode <em>join<\/em>, qui permet de transformer mes couples (&lsquo;x&rsquo;,&rsquo;y&rsquo;) en mots &lsquo;xy&rsquo;.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt;&gt;&gt; [''.join(i) for i in list(product('ABCD', repeat=2))]\n['AA', 'AB', 'AC', 'AD', 'BA', 'BB', 'BC', 'BD', 'CA', 'CB', 'CC', 'CD', 'DA', 'DB', 'DC', 'DD']<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Une fois cette liste de mots possibles construite, je la parcours (ligne 11) avec une boucle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cette boucle, il me faut g\u00e9rer les exceptions. En effet, je compte utiliser la fonction de d\u00e9compression mais si le mot de passe est faux, cela va engendrer une erreur. Il faut donc que je g\u00e8re cette erreur. C&rsquo;est la raison de la pr\u00e9sence du <em>try<\/em> (ligne 12).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;<em>essaie<\/em> (<em>try<\/em>) de d\u00e9compresser (lignes 13, 14 et 15) mais si \u00e7a ne fonctionne pas,  alors la clause apr\u00e8s <em>except<\/em> (ligne 17) est ex\u00e9cut\u00e9e. En l&rsquo;occurrence, <em>pass<\/em> d\u00e9signe une op\u00e9ration nulle, c&rsquo;est-\u00e0-dire qu&rsquo;il ne se passe rien.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Que_faut_le_programme\"><\/span>Que faut le programme ?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pas grand-chose \u00e0 vrai dire ! En effet, il faut compter 0,5 seconde pour un test de d\u00e9compression. Ainsi, si le mot de passe ne comporte que 2 caract\u00e8res, il faut 8649 possibilit\u00e9s \u00d7 0,5 secondes, soit \u00e0 peu pr\u00e8s 4324 secondes (donc environ 1h12min) au pire des cas pour \u00eatre assur\u00e9\u00b7e\u00b7s de trouver le mot de passe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais nous ne sommes pas au pays des bisounours et les mots de passe font rarement 2 caract\u00e8res&#8230; \u00c0 l&rsquo;aide de <a href=\"https:\/\/www-fourier.ujf-grenoble.fr\/~parisse\/giac_fr.html\" target=\"_blank\" rel=\"noreferrer noopener\">XCAS<\/a>, et du code suivant:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">s:=0;for (p:=2;p&lt;15;p++) {s:=s+perm(93,p);}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">on obtient un total de 3659791978821893009272558749 possibilit\u00e9s en testant des mots de passe de 2 \u00e0 14 caract\u00e8res, soit \\(1,2\\times10^{20}\\) ann\u00e9es. Vous avez le temps ?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une ann\u00e9e compte 31536000 secondes. On peut donc effectuer 63072000 tests en une ann\u00e9e, soit des tests pour un mot de passe de 2 \u00e0 3 lettres seulement!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais s&rsquo;il n&rsquo;y avait que \u00e7a ! Car nous sommes quand-m\u00eame limit\u00e9s par la m\u00e9moire de l&rsquo;ordinateur&#8230; La variable <em>liste<\/em> doit contenir toutes les permutations&#8230; et il y en a beaucoup ! Beaucoup trop m\u00eame ! Pour un ordinateur classique, la m\u00e9moire est tr\u00e8s vite satur\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 titre d&rsquo;exemple, la liste des permutations \u00e0 4 caract\u00e8res est impossible \u00e0 construire sur mon ordinateur Processeur AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx, 2100&nbsp;MHz, 4 c\u0153ur(s), 8 processeur(s) logique(s) et 8 Go de RAM.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Hacker_un_fichier_7z_en_Python_une_autre_methode\"><\/span>Hacker un fichier 7z en Python: une autre m\u00e9thode<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour contrer ce probl\u00e8me de m\u00e9moire, on pourrait construire non pas une liste mais un fichier contenant toutes les permutations.<\/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 itertools import product\n\nalphabet = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&amp;*()-_+=~`[]{}:;\\\"'&lt;>,.?\/\\\\\"\nF = open('permutations.txt' , 'w', encoding = 'utf8')\n\nfor p in range(2,15):\n    for c in product(alphabet,repeat=p):\n        ligne = ''.join(c) + '\\n'\n        F.write( ligne )\n    \nF.close()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est nettement mieux que le script pr\u00e9c\u00e9dent, mais il faut tout de m\u00eame s&rsquo;armer de patience pour ne serait-ce que cr\u00e9er le fichier contenant tous les mots de passe possibles de 2 \u00e0 14 caract\u00e8res&#8230; et je ne vous raconte m\u00eame pas la taille du bousin !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 titre d&rsquo;exemple, en 1h30, j&rsquo;ai obtenu un fichier de 32 Go&#8230; et aucun \u00e9diteur ne peut l&rsquo;ouvrir tellement il est volumineux !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vous l&rsquo;aurez compris, hacker un mot de passe par force brut est dans la pratique totalement stupide car tr\u00e8s souvent irr\u00e9alisable (pour monsieur et madame tout le monde).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bien entendu, il existe des machines bien plus performantes que mon ordinateur personnel et ses 8 Go de RAM sur lesquelles on pourrait \u00e9ventuellement obtenir des r\u00e9sultats plus probants. Mais en g\u00e9n\u00e9ral, il faut oublier de tenter de hacker un mot de passe en Python.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les logiciels que l&rsquo;on peut trouver ci et l\u00e0 sont sans doute \u00e9crit en C, donc plus l\u00e9g\u00e8rement rapides, mais il ne faut pas s&rsquo;attendre \u00e0 une vitesse bien sup\u00e9rieure. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La force brute est donc l&rsquo;une des pires fa\u00e7ons de hacker un mot de passe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si la cryptographie vous int\u00e9resse, vous pouvez jeter un coup d\u2019\u0153il \u00e0 cet <a href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/13\/steganographie-python\/\">article (st\u00e9ganographie)<\/a>, ou encore \u00e0 cet <a href=\"https:\/\/www.mathweb.fr\/euclide\/2019\/02\/05\/chiffrement-de-hill-en-python\/\">article (chiffrement de Hill)<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hacker un fichier compress\u00e9 au format 7z, prot\u00e9g\u00e9 par un mot de passe, en Python est en th\u00e9orie faisable. Mais en pratique, vous allez voir que pour une personne lambda, c&rsquo;est rarement faisable&#8230;<\/p>\n","protected":false},"author":1,"featured_media":3573,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,6,5],"tags":[226,228,227],"class_list":["post-3572","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatique","category-mathematiques","category-python","tag-arrangements","tag-combinaisons","tag-permutations"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python - Mathweb.fr<\/title>\n<meta name=\"description\" content=\"Hacker un fichier au format 7z, prot\u00e9g\u00e9 par un mot de passe, en Python est en th\u00e9orie faisable. Mais en pratique, c&#039;est autre chose...\" \/>\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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python - Mathweb.fr\" \/>\n<meta property=\"og:description\" content=\"Hacker un fichier au format 7z, prot\u00e9g\u00e9 par un mot de passe, en Python est en th\u00e9orie faisable. Mais en pratique, c&#039;est autre chose...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-18T11:23:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-03T12:57:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"717\" \/>\n\t<meta property=\"og:image:height\" content=\"398\" \/>\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=\"6 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\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/\"},\"author\":{\"name\":\"St\u00e9phane Pasquet\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"headline\":\"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python\",\"datePublished\":\"2020-09-18T11:23:49+00:00\",\"dateModified\":\"2020-10-03T12:57:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/\"},\"wordCount\":1167,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hack-7z-python.jpg\",\"keywords\":[\"arrangements\",\"combinaisons\",\"permutations\"],\"articleSection\":[\"Informatique\",\"Math\u00e9matiques\",\"Python\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/\",\"name\":\"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python - Mathweb.fr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hack-7z-python.jpg\",\"datePublished\":\"2020-09-18T11:23:49+00:00\",\"dateModified\":\"2020-10-03T12:57:28+00:00\",\"description\":\"Hacker un fichier au format 7z, prot\u00e9g\u00e9 par un mot de passe, en Python est en th\u00e9orie faisable. Mais en pratique, c'est autre chose...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hack-7z-python.jpg\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/hack-7z-python.jpg\",\"width\":717,\"height\":398,\"caption\":\"hacker 7zip python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/09\\\/18\\\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe 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":"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python - Mathweb.fr","description":"Hacker un fichier au format 7z, prot\u00e9g\u00e9 par un mot de passe, en Python est en th\u00e9orie faisable. Mais en pratique, c'est autre chose...","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\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python - Mathweb.fr","og_description":"Hacker un fichier au format 7z, prot\u00e9g\u00e9 par un mot de passe, en Python est en th\u00e9orie faisable. Mais en pratique, c'est autre chose...","og_url":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/","og_site_name":"Mathweb.fr","article_published_time":"2020-09-18T11:23:49+00:00","article_modified_time":"2020-10-03T12:57:28+00:00","og_image":[{"width":717,"height":398,"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-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":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#article","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/"},"author":{"name":"St\u00e9phane Pasquet","@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"headline":"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python","datePublished":"2020-09-18T11:23:49+00:00","dateModified":"2020-10-03T12:57:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/"},"wordCount":1167,"commentCount":2,"publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python.jpg","keywords":["arrangements","combinaisons","permutations"],"articleSection":["Informatique","Math\u00e9matiques","Python"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/","name":"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe en Python - Mathweb.fr","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python.jpg","datePublished":"2020-09-18T11:23:49+00:00","dateModified":"2020-10-03T12:57:28+00:00","description":"Hacker un fichier au format 7z, prot\u00e9g\u00e9 par un mot de passe, en Python est en th\u00e9orie faisable. Mais en pratique, c'est autre chose...","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python.jpg","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/09\/hack-7z-python.jpg","width":717,"height":398,"caption":"hacker 7zip python"},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/09\/18\/hacker-un-fichier-7z-protege-par-un-mot-de-passe-en-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"Hacker un fichier 7z prot\u00e9g\u00e9 par un mot de passe 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\/3572","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=3572"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/3572\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media\/3573"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=3572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/categories?post=3572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/tags?post=3572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}