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

.128522.1280137w4h)1(+5-_s3u:/S[ qbnO=éve0}imtP]R69p2dr;gylck{fao050P0C0H0Z0F0U0n0u0V0U0Z0n0n0z010H0F0N010406050n0p0G0G0Z0Q0T040s0!0U0p0^0!0x0u020Z0G0N0R0u0K0C120Q0v0p0C0n050r0 1113150}0N04051A1t1D0r1A0}0P0F0B0-0/0;0?0/0x0S0p0Z0S0C0l0N0T0H0f1c0u0f0F0S0f0U1)0f0H0{050(0w0U0C1M0:0=011(1*1,1*0H1=1@1:0H0Q1B1!0-180n0N0Z0x0?0O011_1O010Y0*0C0x1g0C1:2b2d2i1{2l1@2o0G2q040b0u0I0Q0!0N0!0n0F1b1d0$290Q0Q0C0V2L1t2s0x1B0r1!2X2527261;0P2u1P0F0x2n2I1:1J1L0.1`2+2-0x0!2;1:0N2Q1B2V2X310~2c1d2?2j2`0Q120U1:0Z1%2Q0Y0?030m0m0V2{0C1,2_0!0l0D0l0h0{0h1t0Z32350|342t371{393b3d3f0C3h013j3l3n3p2.3s0l2g040O3y3A2d3C2V2*013H0Z3c1B3e0f3g3i3k3m0$3R2`3T0o0{0o3Y2U3B0}3$3F0?3)3+053-3/3N3;3Q2,3S3t0e0{0e3}1u3 3D361N3G0!3a3*3J3.3L3:3P3?4c3^3t0k0{0k4i331G2 1t2;2!0P272)42013=2A0#1K1B2~0C303B3~3!054Q4X2t0F0P0?3k2V3T3v3,0u4)4+4w3o4y3r3t3v0u2y0C4?4Q3@4`3u1:0r3z4l3%0W0{0$0Y4Z2W584O0d0{0u5e4%4m2@3(0Y0{0V2Q0C0m2`0G0w2Q0m1@212Q5l5g4n0?0`040i0g0q5l0}4j4!3$4=014,353T3V464;4*5T4@525W2h4~504b3q5(2X3z0u5;5k415G3(5b0F3m5l5?353%0!0{0z5}5F5o5I0X0E5N5E5R5!5U2d3_3J5S4a4x5-3t3`4}2p5+6k4d0l3`5/045=5~3E5^5a040Y4p645@5o0x0{0F6F5 4O0!5i042,6L6z6H0w0{0Q2d1V6b6M5^5I0i6!6T2j0G0F0{0O0L6)5n2j5I5L6a5P5f6c4?4-4e6h6d5$4_3T4f6o2z6q4^6l0l4f6v6x6x65385`5|6`5m3%5I0t6;3%6I6Q7p4O5I0J7t5^6104637k6y6=3G6V040V3.7x660{6(7k7g1{6,0{0M0c6S7E0?7z0j7V7q6J7K6?0{0g6_336|5#6~0l4B4:6i727a4B764 5#51734A555:5=7P0?6B2Q0H0p0Q0x7!4O7r1J7j315O4F4$1E4H0r4J1t0H4L8o2%2Y0Z1?4W4I4T1z7l4O2Q0G0m0Y0Z0W5u0f6u1l1n1p1r0u5M7O1G3C1A0a0u0y1d0N0C1a0u0Z0p0;0F0-0Q0A0C0Q0u1@0u8e2L2o0F2Q0u2n291h8,0f2n2J1$8Q1H4S2=5^1Q1S1U1W1Y1!1$1}1+1-1/8A5^2w2n2p0{0I1Z1#8a7O4V5m3Z5f8j7-6e0x3u547=717}5-0h547`785%9J4|4t3M3O9H3S9O809k5o6B5c7%1{6P5k7O6G385q7H5t5v0!5x5z5B250C9#5H7M6^7k8h4Y9A0m4-9J5X3e7?9T3^a35)6p7|5,9U3U2h9Q4va73ra97d829*1{850%889t317D7m0{0X9_5_7s9)6#7L048Qau833(7G7I0Qaz6%az7R047T8b7y0{7Z7CaI7r6KaC6*1{6@aT9Y0{6DaMaXao437$a.aD2j6O6Jat3Bav8c7G6X1R9^a#7W01aOb23%aQ6/aN7)699}5E0r8j4G8w8m8y4I0%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

.128522.1280137w4h)1(+5-_s3u:/S[ qbnO=éve}imtP]R69p2dr;gylck{fao050O0C0G0Y0E0T0n0u0U0T0Y0n0n0z010G0E0M010406050n0p0F0F0Y0P0S040s0Z0T0p0@0Z0x0u020Y0F0M0Q0u0J0C110P0v0p0C0n050r0~1012140|0M04051z1s1C0r1z0|0O0E0B0,0.0:0=0.0x0R0p0Y0R0C0l0M0S0G0f1b0u0f0E0R0f0T1(0f0G0`050%0w0T0C1L0/0;011%1)1+1)0G1;1?1/0G0P1A1Z0,170n0M0Y0x0=0N011^1N010X0)0C0x1f0C1/2a2c2h1`2k1?2n0F2p040b0u0H0P0Z0M0Z0n0E1a1c0#280P0P0C0U2K1s2r0x1A0r1Z2W2426251:0O2t1O0E0x2m2H1/1I1K0-1_2*2,0x0Z2:1/0M2P1A2U2W300}2b1c2=2i2_0P110T1/0Y1$2P0X0=030m0m0U2`0C1+2^0Z0l0N0l0h0`0h1s0Y31340{332s361`383a3c3e0C3g013i3k3m3o2-3r3r0`0N3x3z2c3B2U2)013G0Y3b1A3d0f3f3h3j3l0#3Q2_3S0o0`0o3W2T3A0|3!3E0=3%3)053+3-3M3/3P2+3R3s0e0`0e3{1t3}3C351M3F0Z393(3I3,3K3.3O3;4a3?3s0k0`0k4g321F2~1s2:2Z0O262(40013:2z0!1J1A2}0C2 3A3|3Y054O4V2s0E0O0=3j2U3S3u3*0u4%4)4u3n4w3q3s3u0u2x0C4;4O3=4^3t1/0r3y4j3#0V0`0#0X4X2V564M0d0`0u5c4#4k2?3$0X0`0U2P0C0m1?202P0m2_0F0w2P5j5e4l0=0_040i0g5j5i3 5E015G0q5j0|4h4Y3!4:014*343S2f4.5W484v3p5!2g4|4~495*3s5#3W0u5@5L343#0x0`5u245s5y5A0C5K5D5m0Z0`0z645M5m5G0W0D5R5C5V4(5X0m4+3s3^5$6j5(4?5:0l3^4{2o5.5)4b6u533y5^5_3D5N58040X4n6a5`4M5|040E6M6G665g6Q0x6S5l370w0`0P2c1U6h6N5N5G0i6*6T2i0F0E3U0K6/6Z1`5G0g5Q5T2V5S326i4;6m0l4d6p6y6s6A4d6w2y79503S775?6E5^65375}0$5 5x0Z5z5B6 5k3#5G0t6_5{6#040U3,7A4M6-7G5N6P6R7v6F6`0=67040j6Y3#6=0`0L0c7J6c0`0g0I7U4M7R697N7m3F0`7M30714W736k754z786k4 4@3S4z7d4}7}5/6A7{7j5@7.0=6I2P0G0p0P6X7-6b7n045~5w617u7=5C0r4!1D4F0r4H1s0G4J8y2$2X0Y1=4U4G4R1y7w4M2P0F0m0X0Y0V5s0f6o1k1m1o1q0u6~4D1G1B040a0u0y1c0M0C190u0Y0p0:0E0,0P0A0C0P0u1?0u1I2R0E1b2n0E2P0u2m281g8_0f2m2I1#6~8$2:3#1P1R1T1V1X1Z1#1|1*1,1.8K5N2v2m2o0`0H1Y1!8h324T5k3X5d8t7^5Y2c6u527|6r7g0o52827f7 9T4`4r3L3N7~5*9Y6C9v5m6I5a7!2i6V5i7v8a5n5p5r5t7p8n7s629/6{0`5I8!4i9?9L6l5Z9T5=3d5%4=9S3T9V846z3?aa2g9!4t9%3Ral2W6D7l8j1`8c0$8f9E3A7O7x0`0Wa0417C7E0PaG5Oa2aL7L7)5N7R7T8i6+5m7W047YaL6|a43YaC6O7:aQ9,0`6KaKaU6:7/6Qa+2i0Z6V2+a@3F7C6%1Q63a6aV2i7Ib2a;0=aX0N6^b67PaM040g6f7v7?4Y8s3m2W9G8H0B3B8w0$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

.1280137%w4xh)1(+5-,_s3u:/S[ bn=ve08imtP]69p2drg;ylckfao050N0B0G0W0E0S0p0w0T0S0W0p0p0z010G0E0L010406050p0r0F0F0W0O0R040u0X0S0r0=0X0y050t0|0~10120`0L04051i1b1l0t1i0`0N0E0A0*0,0.0:0,0y0P0r0W0P0B0m0L0R0G0g190w0g0E0P0g0S1N0g0G0^050#0x0S0B1u0-0/011M1O1Q1O0G1W1Y1U0G0O1j1I0*150p0L0W0y0:0M011!1w010V0%0B0y0W0F0B1U1_1{201$231Y26280^0a0w0H0O0X0L0X0p0E180y0w0Z1@0O0O0B0T2t1b2b0y1j0t1I2G1:1=1;1V0N2d1x0E0y252q1U1r1t0+1#2Q2S0y0X2W1U0L2z1j2E2G2-0{1`2u2Y212$0O0 0S1U0W1L2z0V0:030o0o0T2%0B1Q2#0X0m0e0m0i0^0w0i1b0W2.2;0_2:2c2?1$2^2`2|2~0B3001323436382T3b0m1~040w0M3i3k1{3m2E2P013r0W2{1j2}0g2 3133350Z3B2$3D0q3f0q3J2D3l0`3N3p0:3Q3S053U3W3x3Y3A2R3C3c0e3f0e3+1c3-3n2=1v3q0X2_3R3t3V3v3X3z3!3}3$3c0l3f0l432-3.2;3O3=4d3_3y3Z374j3a3c0J3f0J4p453/483;4a3s3T3u3w4x3|393D0b3f0b4G3L4r3o4J3P4L4c4N4e4P3{4i4S3c0D3f0D4X2F4Z472Z4$4b3?3^4f3`4h4z4.0m0K3f0K4?3M4s3:4{4M3@4O4g4y3#4B3d0C0^0i0C584^4t4%4}5f505h4A3D0i3e045z581m2+1b2W2J0N1=2O5b4y2V1s1j2*0B2,3l3,3L054y5T2c0E0N0:332E5y3t5#5%515i5*0w2h0B5-5w535A3+4I4`0U0^0Z0V5V2F463O0d3f625Z4_2@0V0^0T1M0V0V2z0o0A1N250B2z68645b0@040j6p5|2@0^0G0B0f6z6v5a4#6s0s680w6q4#0y0x0^0p1:6D4!4`6s0n6I6K4`0y6d1Y61445W6w1$6G6W6)3;6N046P0O6,6E6T0^0h6?6S210X0^0m020P0G0Q6{6a3q6/6;753O6+6%4@6R2u5,015(2;3D3F5e7h4,523~3E1 5=5@4R7r7m0t3j0w7B6J6-3P6y6A6z346f6h0B7a5b6~040z7N4#0p3F0101680`7d690w7o0o5)3c3(4N7%5^7r3(5;275?7i5.5x7*1U7z3G7C6X215~040V4a7S6Y0^0E856}66042R89770^0O1{1D7f7b0^6u7!7 8f042g8k6r8m8t6L7G6B7M8o7E6s0h6`7!7D6@217c4q8k7%7)3b5+5$7@7.4k8P7;287v4-7r402G7A7C8(8p3;0^1Y1,6o8G8*017P7R8:7E6Z046z8z8w6^040v8~6x8c926*0^0I7Y8M8R7j1{3D4m7,9b7^534m8W7?7p5/4l7{8%8(7B8;8`2R1r0T0B346#8e0:8?9C7F948^8I1$7P0c9F6M8,25950:6s8n2/8_6!3v9R018D998B4s8N7k4C8Q8Y7q8U4D9l9-9o0m4D8$7}9s8H6|3q9P8.9z0Z0T3R1C8A2-9|769D0^8@a79u9X6$9V9J9S0^919%9}8+8c0y9x9z0+9Yama99!979$ah5!9h8O4U9g9=7_0m4U9;8S7w8UaE3J9{9t9W04a2a48j9Ian8=ab9N9 1:9z2$0F0x8/aAaw6sala-4ta$6iaU0,aWa;8u04987!7Za;9)9d4/9,aL8Z8U4:aK9naH4:9_aQa8a=04a)a+a63lbg7Oa!aXa.8vavbh8-a%0obja,5U8Cak9Z8`bvbz6(aiaxa}9F7P0ka#aT2AaVblbHaY9#bq3O9L9F0F0E0^0M4Fa 9a5-8O55aFb69.5j55ba9i7rb-aPaQae8r0!bw6e0E6g2zbS2Fbn4#9EbW5b8`by9zbFc47#a|a:bAbIcb0Xa*bG63bBbKb)btb20y5y5lb.bb5_5lb?8T5j5n9q9`9sb|8|7Ic0c2cfc64`c8adaScKas7Kco7}8;bMbOce7Jc17Lcfb0cjaBb+9*3d5`2}7-aMcE3ecCc@5y5`7|8)7E812z0G0r0O1ac98x8{7HcVc(cXc+5W0t5Y5E5S5G5P1b0G5Jdm2M2H0W1Xdj0t5H7Z0Z0#0%0p04.