Aller au contenu

Chiffrement de Vigenère

I. Le principe⚓︎

Vigenere

Un exemple de chiffrement symétrique

Le chiffre de Vigenère a été proposé il y a un peu moins de 500 ans, et utilise la même idée que le chiffrement de César, mais en la complexifiant beaucoup.

Avant de démarrer

Vous pouvez commencer par résoudre l'exercice suivant :

Le chiffre de César

Mon info

Le chiffre de Vigenère a été proposé il y a un peu moins de 500 ans. C'est un système de chiffrement par substitution qui consiste à coder un texte à l’aide d’une clé donnée cette fois sous forme de texte (plus court généralement) : la première lettre du texte à coder est décalée d'un entier correspondant au premier caractère de la clé et ainsi de suite. Si la clé est plus courte que le texte à coder, elle est répétée..

La correspondance entre les lettres et les nombres associés est donnée dans le tableau suivant :

a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Exemple

Schématisons cela. Nous allons chiffrer le mot incroyable avec la clef nsi.
On répète la clef pour créer une clef de même longueur que le texte à chiffrer :

i n c r o y a b l e
n s i n s i n s i n

En utilisant le tableau précédant, nous obtenons donc :

lettre i n c r o y a b l e
entier associé 8 13 2 17 14 24 0 1 11 4
décalage à effectuer 13 18 8 13 18 8 13 18 8 13
entier pour chiffrement 21 31 10 30 32 32 13 19 19 17

Nous observons que l'on peut obtenir un nombre supérieur à 25. On trouve alors la lettre correspondante en "bouclant" sur l'alphabet. 26 correspond à la lettre "a", 27 à "b" etc. Pour trouver la lettre associée à un enier n, il suffit de regarder la lettre associée à l'entier n % 26

Nous obtenons donc :

lettre i n c r o y a b l e
entier associé 8 13 2 17 14 24 0 1 11 4
décalage à effectuer 13 18 8 13 18 8 13 18 8 13
entier pour chiffrement 21 5 10 4 6 6 13 19 19 17
lettre chiffrée v f k e g g n t r

Remarquons que des lettres différentes peuvent être chiffrées par la même, ce qui rend le décryptage difficile.

II. Exercices⚓︎

correspondance nombre - lettre

Compléter le script suivant qui permet de constituer le dictionnaire nombre_lettredont voici un extrait :

nombre_lettre = {0: 'a', 1: 'b', 2: 'c', 3: 'd', etc...}

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013.128522b];=}wlSd[f-:431(gnahRp/+uerovm)q6 72iy9écsO_Ptk0{5050k0C0W0v0N0i0S0K0R0i0v0S0S0f010W0N0y010406050S0B0G0G0v0D0O040j0E0i0B0^0E0u0K020v0G0y0e0K0x0C120D0I0B0C0S050z0 1113150}0y04051A1t1D0z1A0}0k0N0F0-0/0;0?0/0u0t0B0v0t0C0n0y0O0W0w1c0K0w0N0t0w0i1)0w0W0{050(0c0i0C1M0:0=011(1*1,1*0W1=1@1:0W0D1B1!0-180S0y0v0u0?0M011_1O010m0*0C0u1g0C1:2b2d2i1{2l1@2o0G2q040a0K0V0D0E0y0E0S0N1b1d0$290D0D0C0R2L1t2s0u1B0z1!2X2527261;0k2u1P0N0u2n2I1:1J1L0.1`2+2-0u0E2;1:0y2Q1B2V2X310~2c1d2?2j2`0D120i1:0v1%2Q0m0?030U0U0R2{0C1,2_0E0n0Y0n0r0{0r1t0v32350|342t371{393b3d3f0C3h013j3l3n3p2.3s0n2g040M3y3A2d3C2V2*013H0v3c1B3e0w3g3i3k3m0$3R2`3T0q0{0q3Y2U3B0}3$3F0?3)3+053-3/3N3;3Q2,3S3t0p0{0p3}1u3 3D361N3G0E3a3*3J3.3L3:3P3?4c3^3t0!0{0!4i331G2 1t2;2!0k272)42013=2A0#1K1B2~0C303B3~3!054Q4X2t0N0k0?3k2V3T3v3,0K4)4+4w3o4y3r3t3v0K2y0C4?4Q3@4`3u1:0z3z4l3%0X0{0$0m4Z2W584O0h0{0K5e4%4m2@3(0m0{0R2Q0C0U2`0G0c2Q0U1@212Q5l5g4n0?0`040s0H0o5l0}4j4!3$4=014,353T3V464;4*5T4@525W2h4~504b3q5(2X3z0K5;5k415G3(5b0N3m5l5?353%0E0{0f5}5F5o5I0Z0g5N5E5R5!5U2d3_3J5S4a4x5-3t3`4}2p5+6k4d0n3`5/045=5~3E5^5a040m4p645@5o0u0{0N6F5 4O0E5i042,6L6z6H0c0{0D2d1V6b6M5^5I0s6!6T2j0G0N0{0M0J6)5n2j5I5L6a5P5f6c4?4-4e6h6d5$4_3T4f6o2z6q4^6l0n4f6v6x6x65385`5|6`5m3%5I0l6;3%6I6Q7p4O5I0d7t5^6104637k6y6=3G6V040R3.7x660{6(7k7g1{6,0{0P0L6S7E0?7z0A7V7q6J7K6?0{0H6_336|5#6~0n4B4:6i727a4B764 5#51734A555:5=7P0?6B2Q0W0B0D0u7!4O7r1J7j315O4F4$1E4H0z4J1t0W4L8o2%2Y0v1?4W4I4T1z7l4O2Q0G0U0m0v0X5u0w6u1l1n1p1r0K5M7O1G3C1A0b0K0T1d0y0C1a0K0v0B0;0N0-0D0Q0C0D0K1@0K8e2L2o0N2Q0K2n291h8,0w2n2J1$8Q1H4S2=5^1Q1S1U1W1Y1!1$1}1+1-1/8A5^2w2n2p0{0V1Z1#8a7O4V5m3Z5f8j7-6e0u3u547=717}5-0r547`785%9J4|4t3M3O9H3S9O809k5o6B5c7%1{6P5k7O6G385q7H5t5v0E5x5z5B250C9#5H7M6^7k8h4Y9A0U4-9J5X3e7?9T3^a35)6p7|5,9U3U2h9Q4va73ra97d829*1{850%889t317D7m0{0Z9_5_7s9)6#7L048Qau833(7G7I0Daz6%az7R047T8b7y0{7Z7CaI7r6KaC6*1{6@aT9Y0{6DaMaXao437$a.aD2j6O6Jat3Bav8c7G6X1R9^a#7W01aOb23%aQ6/aN7)699}5E0z8j4G8w8m8y4I0%0)0+04.
correspondance lettre - nombre

Compléter le script suivant qui permet de constituer le dictionnaire lettre_nombredont voici un extrait :

lettre_nombre = {'a': 0, 'b': 1, 'c': 2, 'd': 3, etc...}

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013.128522b];=}wlSd[f-:431(gnahRp/+uerovm)q6 72iy9écsO_Ptk{5050k0C0W0v0N0i0S0K0R0i0v0S0S0f010W0N0y010406050S0B0G0G0v0D0O040j0E0i0B0@0E0u0K020v0G0y0e0K0x0C110D0I0B0C0S050z0~1012140|0y04051z1s1C0z1z0|0k0N0F0,0.0:0=0.0u0t0B0v0t0C0n0y0O0W0w1b0K0w0N0t0w0i1(0w0W0`050%0c0i0C1L0/0;011%1)1+1)0W1;1?1/0W0D1A1Z0,170S0y0v0u0=0M011^1N010m0)0C0u1f0C1/2a2c2h1`2k1?2n0G2p040a0K0V0D0E0y0E0S0N1a1c0#280D0D0C0R2K1s2r0u1A0z1Z2W2426251:0k2t1O0N0u2m2H1/1I1K0-1_2*2,0u0E2:1/0y2P1A2U2W300}2b1c2=2i2_0D110i1/0v1$2P0m0=030U0U0R2`0C1+2^0E0n0M0n0r0`0r1s0v31340{332s361`383a3c3e0C3g013i3k3m3o2-3r3r0`0M3x3z2c3B2U2)013G0v3b1A3d0w3f3h3j3l0#3Q2_3S0q0`0q3W2T3A0|3!3E0=3%3)053+3-3M3/3P2+3R3s0p0`0p3{1t3}3C351M3F0E393(3I3,3K3.3O3;4a3?3s0Z0`0Z4g321F2~1s2:2Z0k262(40013:2z0!1J1A2}0C2 3A3|3Y054O4V2s0N0k0=3j2U3S3u3*0K4%4)4u3n4w3q3s3u0K2x0C4;4O3=4^3t1/0z3y4j3#0X0`0#0m4X2V564M0h0`0K5c4#4k2?3$0m0`0R2P0C0U1?202P0U2_0G0c2P5j5e4l0=0_040s0H5j5i3 5E015G0o5j0|4h4Y3!4:014*343S2f4.5W484v3p5!2g4|4~495*3s5#3W0K5@5L343#0u0`5u245s5y5A0C5K5D5m0E0`0f645M5m5G0Y0g5R5C5V4(5X0U4+3s3^5$6j5(4?5:0n3^4{2o5.5)4b6u533y5^5_3D5N58040m4n6a5`4M5|040N6M6G665g6Q0u6S5l370c0`0D2c1U6h6N5N5G0s6*6T2i0G0N3U0J6/6Z1`5G0H5Q5T2V5S326i4;6m0n4d6p6y6s6A4d6w2y79503S775?6E5^65375}0$5 5x0E5z5B6 5k3#5G0l6_5{6#040R3,7A4M6-7G5N6P6R7v6F6`0=67040A6Y3#6=0`0P0L7J6c0`0H0d7U4M7R697N7m3F0`7M30714W736k754z786k4 4@3S4z7d4}7}5/6A7{7j5@7.0=6I2P0W0B0D6X7-6b7n045~5w617u7=5C0z4!1D4F0z4H1s0W4J8y2$2X0v1=4U4G4R1y7w4M2P0G0U0m0v0X5s0w6o1k1m1o1q0K6~4D1G1B040b0K0T1c0y0C190K0v0B0:0N0,0D0Q0C0D0K1?0K1I2R0N1b2n0N2P0K2m281g8_0w2m2I1#6~8$2:3#1P1R1T1V1X1Z1#1|1*1,1.8K5N2v2m2o0`0V1Y1!8h324T5k3X5d8t7^5Y2c6u527|6r7g0q52827f7 9T4`4r3L3N7~5*9Y6C9v5m6I5a7!2i6V5i7v8a5n5p5r5t7p8n7s629/6{0`5I8!4i9?9L6l5Z9T5=3d5%4=9S3T9V846z3?aa2g9!4t9%3Ral2W6D7l8j1`8c0$8f9E3A7O7x0`0Ya0417C7E0DaG5Oa2aL7L7)5N7R7T8i6+5m7W047YaL6|a43YaC6O7:aQ9,0`6KaKaU6:7/6Qa+2i0E6V2+a@3F7C6%1Q63a6aV2i7Ib2a;0=aX0M6^b67PaM040H6f7v7?4Y8s3m2W9G8H0F3B8w0$0(0*04.
Chiffrement de Vigenère

Compléter le script suivant :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013b];=wlSd[f-:431(gnahp/%+uerovm)q6 x72i,y9c8s_Ptk05050i0A0V0t0M0g0S0I0Q0g0t0S0S0e010V0M0v010406050S0z0E0E0t0B0O040h0C0g0z0?0C0s050w0}0 11130{0v04051j1c1m0w1j0{0i0M0D0+0-0/0;0-0s0r0z0t0r0A0l0v0O0V0u1a0I0u0M0r0u0g1O0u0V0_050$0b0g0A1v0.0:011N1P1R1P0V1X1Z1V0V0B1k1J0+160S0v0t0s0;0L011#1x010k0(0A0s0t0E0A1V1`1|211%241Z27290_0a0I0U0B0C0v0C0S0M190s0I0!1^0B0B0A0Q2u1c2c0s1k0w1J2H1;1?1=1W0i2e1y0M0s262r1V1s1u0,1$2R2T0s0C2X1V0v2A1k2F2H2.0|1{2v2Z222%0B100g1V0t1M2A0k0;030T0T0Q2(0A1R2$0C0l0n0l0p0_0I0p1c0t2/2=0`2;2d2@1%2_2{2}2 0A3101333537392U3c0l1 040I0L3j3l1|3n2F2Q013s0t2|1k2~0u303234360!3C2%3E0o3g0o3K2E3m0{3O3q0;3R3T053V3X3y3Z3B2S3D3d0n3g0n3,1d3.3o2?1w3r0C2`3S3u3W3w3Y3A3#3~3%3d0Y3g0Y442.3/2=3P3?4e3`3z3!384k3b3d0H3g0H4q463:493=4b3t3U3v3x4y3}3a3E0K3g0K4H3M4s3p4K3Q4M4d4O4f4Q3|4j4T3d0R3g0R4Y2G4!482!4%4c3@3_4g3{4i4A4/0l0P3g0P4@3N4t3;4|4N3^4P4h4z3$4C3e0X0_0p0X594_4u4(4~5g515i4B3E0p3f045A591n2,1c2X2K0i1?2P5c4z2W1t1k2+0A2-3m3-3M054z5U2d0M0i0;342F5z3u5$5(525j5+0I2i0A5.5x545B3,4J4{0W0_0!0k5W2G473P0f3g635!4`2^0k0_0Q1N0k0k2A0T0D1O260A2A69655c0^040q6q5}2^0_0V0A0J6A6w5b4$6t0m690I6r4$0s0b0_0S1;6E4#4{6t0N6J6L4{0s6e1Z62455X6x1%6H6X6*3=6O046Q0B6-6F6U0_0F6@6T220C0_0l020r0V0d6|6b3r6:6=763P6,6(4^6S2v5-015)2=3E3G5f7i4-533 3F205?5^4S7s7n0w3k0I7C6K6.3Q6z6B6A356g6i0A7b5c6 040e7O4$0S3G020G0z0C747X7Z74690{7e6a0I7p0T5*3d3)4O7.5_7s3)5=285@7j5/5y7;1V7A3H7D6Y225 040k4b7T6Z0_0M8c6~67042S8g780_0B1|1E7g7c0_6v7+868m042h8r6s8t8A6M7H6C7N8v7F6t0F6{7+7E6^227d4r8r7.7:3c5,5%7~7^4l8W7{297w4.7s412H7B7D8/8w3=0_1Z1-6p8N8;017Q7S8`7F6!046A8G8D6_040j956y8j996+0_0c7)8T8Y7k1|3E4n7?9i7 544n8%7}7q5:4m828.8/7C8{912S1s0Q0A356$8l0;8}9J7G9b8 8P1%7Q0x9M6N8?269c0;6t8u2:906#3w9Y018K9g8I4t8U7l4D8X8)7r8#4E9s9@9v0l4E8-849z8O6}3r9W8^9G0!0Q3S1D8H2.a3779K0_8~ae9B9(6%9$9Q9Z0_989.a48=8j0s9E9G0,9)atag9+9e9-ao5#9o8V4V9n9|800l4V9{8Z7x8#aL3Ka29A9%04a9ab8q9Pau8|ai9Ua61;9G2%0E0b8_aHaD6tasa@4ua-6ja#0-a%a{8B049f7+7*a{9:9k4:9?aS8*8#4;aR9uaO4;a0aXafa|04a:a=ad3mbn7Pa+a(a^8CaCbo8@a.0Tbqa?5V8Jar9*91bCbG6)apaEb49M7Q0ya,a!2Ba$bsbOa)9,bx3P9S9M0E0M0_0L4Gb69h5.8V56aMbd9^5k56bh9p7sb@aWaXal8y0#bD6f0M6h2AbZ2Gbu4$9Lb%5c91bF9GbMcb7,b3a`bHbPci0Ca;bN64bIbRb:bAb90s5z5mb^bi5`5mb}8!5k5o9xa19zc3937Jc7c9cmcd4{cfakaZcRaz7Lcv848{bTbVcl7Kc87Mcmb7cqaIb=9;3e5{2~7@aTcL3fcJc~5z5{838:7F882A0V0z0B1bcg8E927Ic$c/c(c=5X0w5Z5F5T5H5Q1c0V5Kdt2N2I0t1Ydq0w5I7*0!0$0(0S04.