{"cells":[{"metadata":{},"cell_type":"markdown","source":"<div style=\"padding:20px;background-color:papayawhip;\" > \n<h3 style=\"color:chocolate\"> <i class=\"fa fa-info\" aria-hidden=\"true\"> </i> Remarque introductive <i class=\"fa fa-info\" aria-hidden=\"true\"></h3> \n<p> Ce fichier est fait pour être lu sur le site <a href=\"https://notebook.basthon.fr/\"><img src='https://notebook.basthon.fr/assets/efede5218c9087496f16.png' style=\"border: 0; display:inline; margin: 0 5px; height:30px\" alt=\"Basthon\"/></a>. <br>\n \nSi vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>\nVeuillez cliquez sur <a href=\"https://notebook.basthon.fr/\">ce lien</a> et y charger ce fichier à l'aide du bouton \"Ouvrir\" <i class=\"fa fa-folder\" aria-hidden=\"true\"> </i>\n</p> </div> "},{"metadata":{},"cell_type":"markdown","source":"# Chiffrement symétrique - Le chiffrement monoalphabétique\n\nLe but de ce travail pratique est de déchiffrer un message qui a été chiffré avec un chiffrement monoalphabétique en adaptant un programme déjà créé.\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 1 </h3> \n\nLe programme suivant permet de déchiffrer un message codé selon le principe monoalphabétique, en connaissant la clé de chiffrement. \n\nLisez-le en essayant de le comprendre, puis testez-le."},{"metadata":{"trusted":true},"cell_type":"code","source":"# Texte à déchiffrer\ntexte_chiffre = \"\"\"WI RUWWIAI VXVBUPFX TUOV VUOQSXMI OPI NUPPI SPPII\"\"\"\n\n# Alphabet MAJUSCULE uniquement pour simplifier\nliste_alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n# Pour chaque lettre, correspond une lettre dans liste_alphabet\nliste_chiffree = \"SNRFIYAQXLKWBPUZCHVMOTGJDE\"\n\n# texte_dechiffree contiendra la chaine de caractère donc le texte déchiffré\ntexte_dechiffre = \"\"\n\n\n# Parcours caractère par caractère le fichier ouvert.\nfor lettre in texte_chiffre:\n\n # Retourne vrai si \"lettre\" est un caractère alphabétique (a..z)\n if lettre.isalpha(): \n # Recherche la position (index) de la lettre à décoder dans la liste_chiffree.\n index = liste_chiffree.index(lettre)\n \n # On utilise cet index pour trouver la lettre dans liste_alphabet.\n lettre_decodee = liste_alphabet[index]\n \n # On ajoute le caractère déchiffré à la suite du texte déjà déchiffré.\n texte_dechiffre = texte_dechiffre + lettre_decodee\n else:\n # la lettre n'est pas un caractère alphabétique mais peut-être une ponctuation\n texte_dechiffre = texte_dechiffre + lettre\n\n# On affiche le texte decodé\nprint(texte_chiffre)\nprint(texte_dechiffre)\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"On veut maintenant déchiffrer le message suivant `JI KXJIEOI IWIFEIJ TI OIK IKNVOIK XEYXEXK D'IYYFVXI` qui a été codé avec la clé `VMOTIYAQXLGJDESNRFKWBPUZCH`.\n\nReprenez le code précédent et adaptez-le pour décoder ce message."},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"tags":["breakpoint"]},"cell_type":"markdown","source":"#### Ctrl+enter pour continuer ..........."},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 2</h3> \n\nOn aimerait maintenant déchiffrer un message chiffré avec le chiffrement monoalhabétique, mais dont on ne connaît pas la clef.\n\n**Comment procéder pour trouver la clé ?**\nOn peut compter les occurrences (répétition) de chaque lettre dans le message chiffré et les comparer à celles de la langue française pour essayer de retrouver la correspondance.\n\nC'est ce que fait le code suivant. Lisez-le en essayant de le comprendre, puis testez-le.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Texte à déchiffrer\ntexte_chiffre = \"\"\"WI RUWWIAI VXVBUPFX TUOV VUOQSXMI OPI NUPPI SPPII\"\"\"\n\n# Alphabet\nliste_alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n# Liste des occurrences\nliste_occurrence = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n\n# Contiendra le texte déchifré\ntexte_dechiffre = \"\"\n\n# Parcours caractère par caractère le fichier\nfor lettre in texte_chiffre:\n \n # Retourne vrai si \"lettre\" est un caractère alphabétique (a..z)\n if lettre.isalpha():\n \n # Recherche la position (index) de la lettre (conversion en minuscule)\n # à décoder dans la liste_alphabet.\n index = liste_alphabet.index(lettre)\n \n # Incrémenter l'occurence de la lettre correspondante\n liste_occurrence[index] = liste_occurrence[index] + 1\n\n# Afficher les occurrences de chaque lettres\nfor i in range(26):\n print(liste_alphabet[i], \":\",liste_occurrence[i])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Vous avez maintenant intercepté le message suivant dont vous ne connaissez pas la clé : \n```\nPGY VGPNGDGY YITJMYYGZD MIYYA GZ NMPGIT PGY MIDTGY QMIPEAY WMT APY GZQMQGZD \nWEZDTG PGY QGTUMAZY BGY PIDDGY JTGYOIG FEITZMPAGTGY YEAD OI APY PGY TGJEIYYGZD \nBG PGIT JTEJTG DGTTADEATG YEAD OI APY GZNMVAYYGZD WGPIA BG PGITY GZZGUAY ETQGDETAX \nGDMAD WVGH PGY VGPNGDGY PG JTGUAGT JMT YM ZMAYYMZWG GD JMT YGY TAWVGYYGY YEIY PG \nWEZYIPMD BG U UGYYMPM GD BG U JAYEZ WGD VEUUG JEIYYG JMT P MURADAEZ WEZFITM MNGW \nPM ZERPGYYG GD GZQMQGM PGY VMRADMZDY M YETDAT BI JMCY MNGW DEIDGY PGITY LETWGY \nAP PGIT BAD OIG P GUJETDMZD JMT PG WEITMQG YIT DEIY PGY JGIJPGY BG PM QMIPG APY \nPM YEIUGDDTMAGZD MAYGUGZD DEID GZDAGTG M PGIT GUJATG AP GID B MIDMZD UEAZY BG \nJGAZG M PGY JGTYIMBGT OIG PGY VGPNGDGY YEZD BG DEIDGY JMTDY TGYYGTTGY JMT PM \nZMDITG BGY PAGIX B IZ WEDG JMT PG TVAZ LPGING DTGY PMTQG GD DTGY JTELEZB OIA \nYGJMTG PGIT DGTTADEATG BG PM QGTUMZAG B IZ MIDTG JMT PG FITM VMIDG UEZDMQZG \nOIA Y GPGNG GZDTG PM YGOIMZAG GD P VGPNGDAG B IZ DTEAYAGUG WEDG JMT PG PMW \nPGUMZ GD PG TVEZG OIA YGJMTG WGDDG BGTZAGTG BG ZEDTG JTENAZWG AP TGYIPDMAD \nBG WGDDG JEYADAEZ OI APY ZG JEINMAGZD ZA Y GDGZBTG MI PEAZ ZA JETDGT LMWAPGUGZD \nPM QIGTTG WVGH PGITY NEAYAZY GD W GDMAD IZG WMIYG BG NANG MLLPAWDAEZ JEIT BGY \nVEUUGY RGPPAOIGIX PGIT JEJIPMDAEZ ZEURTGIYG GD PM QPEATG OI APY MWOIGTMAGZD BMZY \nPM QIGTTG JMT PGIT WEITMQG PGIT LMAYMAGZD TGQMTBGT WEUUG GDTEADGY BGY PAUADGY \nOIA MNMAGZD BGIX WGZD OIMTMZDG UAPPGY BG PEZQ YIT WGZD OIMDTG NAZQDY UAPPGY BG PMTQG\n```\n\nReprenez le code précédent et adaptez-le pour compter les occurrences de chaque lettre de ce message."},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"tags":["breakpoint"]},"cell_type":"markdown","source":"#### Ctrl+enter pour continuer ..........."},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 3</h3> \n\nOn peut maintenant comparer ces occurrences avec celles de la langue française, fournies ici dans l’histogramme et le tableau suivants :\n\n\n\n\n| Rang | Caractère | Pourcentage | \n| :--------------- |:---------------:| -----:| \n| 1 | E | 12.10% |\n| 2 | S | 7.11% |\n| 3 | R | 6.59% |\n| 4 | T | 6.51% |\n| 5 | A | 6.39% |\n| 6 | L | 6.07% |\n| 7 | I | 5.92% |\n| 8 | U | 5.02% |\n| 9 | O | 4.96% |\n| 10 | N | 4.49% |\n| 11 | D | 3.67% |\n| 12 | C | 3.18% |\n| 13 | M | 2.62% |\n| 14 | P | 2.49% |\n| 15 | G | 1.23% |\n| 16 | B | 1.14% |\n| 17 | V | 1.11% |\n| 18 | H | 1.11% |\n| 19 | F | 1.11% |\n| 20 | Q | 0.65% |\n| 21 | Y | 0.46% |\n| 22 | X | 0.38% |\n| 23 | J | 0.34% |\n| 24 | K | 0.29% |\n| 25 | W | 0.17% |\n| 26 | Z | 0.15% |\n\n\nOn constate que la lettre la plus utilisée est le E, ensuite S, ensuite R, etc…\n\nEn se basant sur cette liste vous pouvez trouver la clé de chiffrage : \n1. Sur une feuille de papier, en partant du résultat de l'exercice 2, associez la lettre la plus utilisée de l'alphabet à celle la plus utilisée dans le texte, puis la 2ème plus utilisée, et ainsi de suite jusqu'à la moins utilisée. Cela vous donne une première correspondance.\n2. Copiez le code de l'exercice 1.\n3. Utilisez comme clef de base l'alphabet non modifié `\"ABCDE...\"` car pour l’instant vous ne connaissez pas la clé.\n4. Remplacez chaque lettre dans la clef par son équivalent chiffré.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Cela vous donne déjà une première clef approximative. À partir de là, par tentatives successives : \n\n1. Exécutez le code, puis\n2. modifiez votre clef en inversant la position des lettres. Attention de toujours garder 26 lettres différentes.\n3. Continuez à tâtons avec les mots que vous reconnaissez, par exemple s'il vous semble reconnaitre un déterminant ou une double lettre, vous pouvez adapter votre clé pour que faire coincider le message déchiffré."},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":2}
\ No newline at end of file
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": "<div style=\"padding:20px;background-color:papayawhip;\" > \n<h3 style=\"color:chocolate\"> <i class=\"fa fa-info\" aria-hidden=\"true\"> </i> Remarque introductive <i class=\"fa fa-info\" aria-hidden=\"true\"></h3> \n<p> Ce fichier est fait pour être lu sur le site <a href=\"https://notebook.basthon.fr/\"><img src='https://notebook.basthon.fr/assets/efede5218c9087496f16.png' style=\"border: 0; display:inline; margin: 0 5px; height:30px\" alt=\"Basthon\"/></a>. <br>\n \nSi vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>\nVeuillez cliquez sur <a href=\"https://notebook.basthon.fr/\">ce lien</a> et y charger ce fichier à l'aide du bouton \"Ouvrir\" <i class=\"fa fa-folder\" aria-hidden=\"true\"> </i>\n</p> </div> "
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Chiffrement symétrique - Le chiffrement monoalphabétique\n\nLe but de ce travail pratique est de déchiffrer un message qui a été chiffré avec un chiffrement monoalphabétique en adaptant un programme déjà créé.\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 1 </h3> \n\nLe programme suivant permet de déchiffrer un message selon le principe du chiffrement monoalphabétique, en connaissant la clé de chiffrement. \n\nLisez-le en essayant de le comprendre, puis testez-le."
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "# Texte à déchiffrer\ntexte_chiffre = \"\"\"WI RUWWIAI VXVBUPFX TUOV VUOQSXMI OPI NUPPI SPPII\"\"\"\n\n# Alphabet MAJUSCULE uniquement pour simplifier\nliste_alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n# Pour chaque lettre, correspond une lettre dans liste_alphabet\nliste_chiffree = \"SNRFIYAQXLKWBPUZCHVMOTGJDE\"\n\n# texte_dechiffree contiendra la chaine de caractère donc le texte déchiffré\ntexte_dechiffre = \"\"\n\n\n# Parcours caractère par caractère le fichier ouvert.\nfor lettre in texte_chiffre:\n\n # Retourne vrai si \"lettre\" est un caractère alphabétique (a..z)\n if lettre.isalpha(): \n # Recherche la position (index) de la lettre à déchiffrer dans la liste_chiffree.\n index = liste_chiffree.index(lettre)\n \n # On utilise cet index pour trouver la lettre dans liste_alphabet.\n lettre_dechiffre = liste_alphabet[index]\n \n # On ajoute le caractère déchiffré à la suite du texte déjà déchiffré.\n texte_dechiffre = texte_dechiffre + lettre_dechiffre\n else:\n # la lettre n'est pas un caractère alphabétique mais peut-être une ponctuation\n texte_dechiffre = texte_dechiffre + lettre\n\n# On affiche le texte dechiffre\nprint(texte_chiffre)\nprint(texte_dechiffre)\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "On veut maintenant déchiffrer le message suivant `JI KXJIEOI IWIFEIJ TI OIK IKNVOIK XEYXEXK D'IYYFVXI` qui a été chiffré avec la clé `VMOTIYAQXLGJDESNRFKWBPUZCH`.\n\nReprenez le programme précédent et adaptez-le pour déchiffrer ce message."
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": ""
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"breakpoint"
]
},
"source": "#### Ctrl+enter pour continuer ..........."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 2</h3> \n\nOn aimerait maintenant déchiffrer un message chiffré avec le chiffrement monoalhabétique, mais dont on ne connaît pas la clef.\n\n**Comment procéder pour trouver la clé ?**\nOn peut compter les occurrences (répétition) de chaque lettre dans le message chiffré et les comparer à celles de la langue française pour essayer de retrouver la correspondance.\n\nC'est ce que fait le programme suivant. Lisez-le en essayant de le comprendre, puis testez-le.\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "# Texte à déchiffrer\ntexte_chiffre = \"\"\"WI RUWWIAI VXVBUPFX TUOV VUOQSXMI OPI NUPPI SPPII\"\"\"\n\n# Alphabet\nliste_alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n# Liste des occurrences\nliste_occurrence = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n\n# Contiendra le texte déchifré\ntexte_dechiffre = \"\"\n\n# Parcours caractère par caractère le fichier\nfor lettre in texte_chiffre:\n \n # Retourne vrai si \"lettre\" est un caractère alphabétique (a..z)\n if lettre.isalpha():\n \n # Recherche la position (index) de la lettre (conversion en minuscule)\n # à déchiffrer dans la liste_alphabet.\n index = liste_alphabet.index(lettre)\n \n # Incrémenter l'occurence de la lettre correspondante\n liste_occurrence[index] = liste_occurrence[index] + 1\n\n# Afficher les occurrences de chaque lettres\nfor i in range(26):\n print(liste_alphabet[i], \":\",liste_occurrence[i])"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Vous avez maintenant intercepté le message suivant dont vous ne connaissez pas la clé : \n```\nPGY VGPNGDGY YITJMYYGZD MIYYA GZ NMPGIT PGY MIDTGY QMIPEAY WMT APY GZQMQGZD \nWEZDTG PGY QGTUMAZY BGY PIDDGY JTGYOIG FEITZMPAGTGY YEAD OI APY PGY TGJEIYYGZD \nBG PGIT JTEJTG DGTTADEATG YEAD OI APY GZNMVAYYGZD WGPIA BG PGITY GZZGUAY ETQGDETAX \nGDMAD WVGH PGY VGPNGDGY PG JTGUAGT JMT YM ZMAYYMZWG GD JMT YGY TAWVGYYGY YEIY PG \nWEZYIPMD BG U UGYYMPM GD BG U JAYEZ WGD VEUUG JEIYYG JMT P MURADAEZ WEZFITM MNGW \nPM ZERPGYYG GD GZQMQGM PGY VMRADMZDY M YETDAT BI JMCY MNGW DEIDGY PGITY LETWGY \nAP PGIT BAD OIG P GUJETDMZD JMT PG WEITMQG YIT DEIY PGY JGIJPGY BG PM QMIPG APY \nPM YEIUGDDTMAGZD MAYGUGZD DEID GZDAGTG M PGIT GUJATG AP GID B MIDMZD UEAZY BG \nJGAZG M PGY JGTYIMBGT OIG PGY VGPNGDGY YEZD BG DEIDGY JMTDY TGYYGTTGY JMT PM \nZMDITG BGY PAGIX B IZ WEDG JMT PG TVAZ LPGING DTGY PMTQG GD DTGY JTELEZB OIA \nYGJMTG PGIT DGTTADEATG BG PM QGTUMZAG B IZ MIDTG JMT PG FITM VMIDG UEZDMQZG \nOIA Y GPGNG GZDTG PM YGOIMZAG GD P VGPNGDAG B IZ DTEAYAGUG WEDG JMT PG PMW \nPGUMZ GD PG TVEZG OIA YGJMTG WGDDG BGTZAGTG BG ZEDTG JTENAZWG AP TGYIPDMAD \nBG WGDDG JEYADAEZ OI APY ZG JEINMAGZD ZA Y GDGZBTG MI PEAZ ZA JETDGT LMWAPGUGZD \nPM QIGTTG WVGH PGITY NEAYAZY GD W GDMAD IZG WMIYG BG NANG MLLPAWDAEZ JEIT BGY \nVEUUGY RGPPAOIGIX PGIT JEJIPMDAEZ ZEURTGIYG GD PM QPEATG OI APY MWOIGTMAGZD BMZY \nPM QIGTTG JMT PGIT WEITMQG PGIT LMAYMAGZD TGQMTBGT WEUUG GDTEADGY BGY PAUADGY \nOIA MNMAGZD BGIX WGZD OIMTMZDG UAPPGY BG PEZQ YIT WGZD OIMDTG NAZQDY UAPPGY BG PMTQG\n```\n\nReprenez le programme précédent et adaptez-le pour compter les occurrences de chaque lettre de ce message."
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": ""
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"breakpoint"
]
},
"source": "#### Ctrl+enter pour continuer ..........."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 3</h3> \n\nOn peut maintenant comparer ces occurrences avec celles de la langue française, fournies ici dans l’histogramme et le tableau suivants :\n\n\n\n\n| Rang | Caractère | Pourcentage | \n| :--------------- |:---------------:| -----:| \n| 1 | E | 12.10% |\n| 2 | S | 7.11% |\n| 3 | R | 6.59% |\n| 4 | T | 6.51% |\n| 5 | A | 6.39% |\n| 6 | L | 6.07% |\n| 7 | I | 5.92% |\n| 8 | U | 5.02% |\n| 9 | O | 4.96% |\n| 10 | N | 4.49% |\n| 11 | D | 3.67% |\n| 12 | C | 3.18% |\n| 13 | M | 2.62% |\n| 14 | P | 2.49% |\n| 15 | G | 1.23% |\n| 16 | B | 1.14% |\n| 17 | V | 1.11% |\n| 18 | H | 1.11% |\n| 19 | F | 1.11% |\n| 20 | Q | 0.65% |\n| 21 | Y | 0.46% |\n| 22 | X | 0.38% |\n| 23 | J | 0.34% |\n| 24 | K | 0.29% |\n| 25 | W | 0.17% |\n| 26 | Z | 0.15% |\n\n\nOn constate que la lettre la plus utilisée est le E, ensuite S, ensuite R, etc…\n\nEn se basant sur cette liste vous pouvez trouver la clé de chiffrage : \n1. Sur une feuille de papier, en partant du résultat de l'exercice 2, associez la lettre la plus utilisée de l'alphabet à celle la plus utilisée dans le texte, puis la 2ème plus utilisée, et ainsi de suite jusqu'à la moins utilisée. Cela vous donne une première correspondance.\n2. Copiez le programme de l'exercice 1.\n3. Utilisez comme clef de base l'alphabet non modifié `\"ABCDE...\"` car pour l’instant vous ne connaissez pas la clé.\n4. Remplacez chaque lettre dans la clef par son équivalent chiffré.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": ""
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Cela vous donne déjà une première clef approximative. À partir de là, par tentatives successives : \n\n1. Exécutez le programme, puis\n2. modifiez votre clef en inversant la position des lettres. Attention de toujours garder 26 lettres différentes.\n3. Continuez à tâtons avec les mots que vous reconnaissez, par exemple s'il vous semble reconnaitre un déterminant ou une double lettre, vous pouvez adapter votre clé pour que faire coincider le message déchiffré."
<p> Ce fichier est fait pour être lu sur le site <ahref="https://notebook.basthon.fr/"><imgsrc='https://notebook.basthon.fr/assets/efede5218c9087496f16.png'style="border: 0; display:inline; margin: 0 5px; height:30px"alt="Basthon"/></a>. <br>
Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>
Veuillez cliquez sur <ahref="https://notebook.basthon.fr/">ce lien</a> et y charger ce fichier à l'aide du bouton "Ouvrir" <iclass="fa fa-folder"aria-hidden="true"></i>
</p></div>
%% Cell type:markdown id: tags:
# Chiffrement symétrique - Le chiffrement monoalphabétique
Le but de ce travail pratique est de déchiffrer un message qui a été chiffré avec un chiffrement monoalphabétique en adaptant un programme déjà créé.
# Pour chaque lettre, correspond une lettre dans liste_alphabet
liste_chiffree="SNRFIYAQXLKWBPUZCHVMOTGJDE"
# texte_dechiffree contiendra la chaine de caractère donc le texte déchiffré
texte_dechiffre=""
# Parcours caractère par caractère le fichier ouvert.
forlettreintexte_chiffre:
# Retourne vrai si "lettre" est un caractère alphabétique (a..z)
iflettre.isalpha():
# Recherche la position (index) de la lettre à décoder dans la liste_chiffree.
# Recherche la position (index) de la lettre à déchiffrer dans la liste_chiffree.
index=liste_chiffree.index(lettre)
# On utilise cet index pour trouver la lettre dans liste_alphabet.
lettre_decodee=liste_alphabet[index]
lettre_dechiffre=liste_alphabet[index]
# On ajoute le caractère déchiffré à la suite du texte déjà déchiffré.
texte_dechiffre=texte_dechiffre+lettre_decodee
texte_dechiffre=texte_dechiffre+lettre_dechiffre
else:
# la lettre n'est pas un caractère alphabétique mais peut-être une ponctuation
texte_dechiffre=texte_dechiffre+lettre
# On affiche le texte decodé
# On affiche le texte dechiffre
print(texte_chiffre)
print(texte_dechiffre)
```
%% Cell type:markdown id: tags:
On veut maintenant déchiffrer le message suivant `JI KXJIEOI IWIFEIJ TI OIK IKNVOIK XEYXEXK D'IYYFVXI` qui a été codé avec la clé `VMOTIYAQXLGJDESNRFKWBPUZCH`.
On veut maintenant déchiffrer le message suivant `JI KXJIEOI IWIFEIJ TI OIK IKNVOIK XEYXEXK D'IYYFVXI` qui a été chiffré avec la clé `VMOTIYAQXLGJDESNRFKWBPUZCH`.
Reprenez le code précédent et adaptez-le pour décoder ce message.
Reprenez le programme précédent et adaptez-le pour déchiffrer ce message.
On constate que la lettre la plus utilisée est le E, ensuite S, ensuite R, etc…
En se basant sur cette liste vous pouvez trouver la clé de chiffrage :
1. Sur une feuille de papier, en partant du résultat de l'exercice 2, associez la lettre la plus utilisée de l'alphabet à celle la plus utilisée dans le texte, puis la 2ème plus utilisée, et ainsi de suite jusqu'à la moins utilisée. Cela vous donne une première correspondance.
2. Copiez le code de l'exercice 1.
2. Copiez le programme de l'exercice 1.
3. Utilisez comme clef de base l'alphabet non modifié `"ABCDE..."` car pour l’instant vous ne connaissez pas la clé.
4. Remplacez chaque lettre dans la clef par son équivalent chiffré.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Cela vous donne déjà une première clef approximative. À partir de là, par tentatives successives :
1. Exécutez le code, puis
1. Exécutez le programme, puis
2. modifiez votre clef en inversant la position des lettres. Attention de toujours garder 26 lettres différentes.
3. Continuez à tâtons avec les mots que vous reconnaissez, par exemple s'il vous semble reconnaitre un déterminant ou une double lettre, vous pouvez adapter votre clé pour que faire coincider le message déchiffré.