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.128522kg[: r;)SĂ©/q(lo4y6b=ac1+5ud3t2}_Pw7ev{p-fh0O9mnR]is050C0L0E0w0Z0p0!0g0x0p0w0!0!0v010E0Z0O010406050!0B0V0V0w0h0s040k0q0p0B0^0q0W0g020w0V0O0i0g0X0L120h0n0B0L0!050m0 1113150}0O04051A1t1D0m1A0}0C0Z0M0-0/0;0?0/0W0d0B0w0d0L0P0O0s0E0R1c0g0R0Z0d0R0p1)0R0E0{050(0u0p0L1M0:0=011(1*1,1*0E1=1@1:0E0h1B1!0-180!0O0w0W0?0F011_1O010Q0*0L0W1g0L1:2b2d2i1{2l1@2o0V2q040a0g0I0h0q0O0q0!0Z1b1d0$290h0h0L0x2L1t2s0W1B0m1!2X2527261;0C2u1P0Z0W2n2I1:1J1L0.1`2+2-0W0q2;1:0O2Q1B2V2X310~2c1d2?2j2`0h120p1:0w1%2Q0Q0?030H0H0x2{0L1,2_0q0P0S0P0y0{0y1t0w32350|342t371{393b3d3f0L3h013j3l3n3p2.3s0P2g040F3y3A2d3C2V2*013H0w3c1B3e0R3g3i3k3m0$3R2`3T0D0{0D3Y2U3B0}3$3F0?3)3+053-3/3N3;3Q2,3S3t0r0{0r3}1u3 3D361N3G0q3a3*3J3.3L3:3P3?4c3^3t0A0{0A4i331G2 1t2;2!0C272)42013=2A0#1K1B2~0L303B3~3!054Q4X2t0Z0C0?3k2V3T3v3,0g4)4+4w3o4y3r3t3v0g2y0L4?4Q3@4`3u1:0m3z4l3%0c0{0$0Q4Z2W0g584O0W0Q0{0x2Q0L0H2`0V0u2Q0H1@212Q5e4%4m2@010`040o0j0f5y0}4j4!3$4=014,353T3V464;4*5O4@525R2h4~504b3q5Z2X3z0g5,5g414n435b0Z3m5y5.353%0q0{0v5^5h5:5C0{0N0G5I5y585N5P2d3_3J695X4_6c4}2p5$4x5(3t3`5*045-5_3E615a040Q4p5 5/5B0W0{0Z6z5`4O0q0J6D0W6F6t6B0u0{0h2d1V676A2j5D0o6U6G610V0Z0{0F0t6Z6N6W0{5G665K2W685V6a0W3T4f4:6e516g4e5!6j5W6~6m0P6{3Y6r6r606B5=5@6;5z3%5D0e6+5A386D7k7h0{0Y7o6H5}6M7l3G6P040x3.7s616X7C5B6$0{0U0K7v5{0{0z7L5i7n7f7b6-040j6:335M6@0H4-4A6d7!744d0P4B6i2z6k4^754B6p7a6V1{6v2Q0E0B0h6L7f6s7w5;041J7e315J4F4$1E4H0m4J1t0E4L8g2%2Y0w1?4W4I4T1z7g4O2Q0V0H0Q0w0c5o0R6o1l1n1p1r0g5H7S1G3C1A0b0g0T1d0O0L1a0g0w0B0;0Z0-0h0l0L0h0g1@0g862L2o0Z2Q0g2n291h8!0R2n2J1$8I1H4S2=611Q1S1U1W1Y1!1$1}1+1-1/8s612w2n2p0{0I1Z1#80334V5z3Z6=8b7Z4?4-0y546|7)5%3S9v4|5#739z3^9B2h4t3M3O7*9G9w3}7_0?6v5c7P615j5l5n5p0q5r5t5v250L7F7U5F8I887o6e9u3U7(7:5Y9v2g7.4 9E6l9A9=3K9K4a9~9N5S566q5-7T7`6Q0%7~9l3B827p040N9*3G7R7Y6!5B5D9-agaa437y7A0hal0?7E7S9Q017H047J9U5B5|047O81au3(an4YaD5D7WaNaD6v6xayaVap7m046Ea!6,1{6I6KaI387y6R1R9)aCa#1{aBaoa*0?aF6)az627V657f894Y0m8b4G8o8e8q4I0%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.128522kg[: r;)SĂ©/q(lo4y6b=ac1+5ud3t2}_Pw7ev{p-fhO9mnR]is050C0L0E0w0Y0p0Z0g0x0p0w0Z0Z0v010E0Y0O010406050Z0B0U0U0w0h0s040k0q0p0B0@0q0V0g020w0U0O0i0g0W0L110h0n0B0L0Z050m0~1012140|0O04051z1s1C0m1z0|0C0Y0M0,0.0:0=0.0V0d0B0w0d0L0P0O0s0E0R1b0g0R0Y0d0R0p1(0R0E0`050%0u0p0L1L0/0;011%1)1+1)0E1;1?1/0E0h1A1Z0,170Z0O0w0V0=0F011^1N010Q0)0L0V1f0L1/2a2c2h1`2k1?2n0U2p040a0g0I0h0q0O0q0Z0Y1a1c0#280h0h0L0x2K1s2r0V1A0m1Z2W2426251:0C2t1O0Y0V2m2H1/1I1K0-1_2*2,0V0q2:1/0O2P1A2U2W300}2b1c2=2i2_0h110p1/0w1$2P0Q0=030H0H0x2`0L1+2^0q0P0F0P0y0`0y1s0w31340{332s361`383a3c3e0L3g013i3k3m3o2-3r3r0`0F3x3z2c3B2U2)013G0w3b1A3d0R3f3h3j3l0#3Q2_3S0D0`0D3W2T3A0|3!3E0=3%3)053+3-3M3/3P2+3R3s0r0`0r3{1t3}3C351M3F0q393(3I3,3K3.3O3;4a3?3s0A0`0A4g321F2~1s2:2Z0C262(40013:2z0!1J1A2}0L2 3A3|3Y054O4V2s0Y0C0=3j2U3S3u3*0g4%4)4u3n4w3q3s3u0g2x0L4;4O3=4^3t1/0m3y4j3#0c0`0#0Q4X2V0g564M0V0Q0`0x2P0L0H1?202P0H2_0U0u2P5c4#4k2?010_040o0j5w5e3 4l0=5B0f5w0|4h4Y3!4:014*343S2f4.5R484v3p5V2g4|4~495#3s5W3W0g5/5G343#0V0`5o245m5s5u0L5F5f5I010q0`0v5 5H5z5B0N0G5M5w565Y0H4+3s3^5X4(5S4=503@5%2o5)5!4b0P6j5.5:605z58040Q4n665=5g0`0Y6F3D610q0J6I0V6K5y370u0`0h2c1U6d672i5B0o6Z6G610U0Y3U0t6(6L680`0j5L5O2V5N325Q6l5T2c3S4d6k6s4?5+0P4d4{6r6m4 4@70533y5:7g5;6:375^0$5`5r0q5t5v6^5x3#5B0e6/6S3F6U040x3,7x7u0`6%7s6z7k046J7s7i7y0=63040z6R3#6+0`0T0K7E4M5B0j0X7U4M7R657N7J3F6I6c7I6|4;6h0P4z727a5*6u4z782y736o4y7e047g7.0=6B2P0E0B0h6Q7-6!7/045_5q5|7r306`4W0m4!1D4F0m4H1s0E4J8x2$2X0w1=4U4G4R1y7t4M2P0U0H0Q0w0c5m0R6j1k1m1o1q0g6@4D1G1B040b0g0S1c0O0L190g0w0B0:0Y0,0h0l0L0h0g1?0g1I2R0Y1b2n0Y2P0g2m281g8^0R2m2I1#6@8#2:3#1P1R1T1V1X1Z1#1|1*1,1.8J612v2m2o0`0I1Y1!8f324T5x3X2V4Z3m7t6f4+0D527{5Z743R9O4`5(7|6t3?9U2g4r3L3N7b5#9!2W558h89593K7)615h5j5l5n7m8l7p5}7!616$6?7;6{5=9M5U9O5-3d6f9)9T3T804}9X9S9Zae9$4tacaj5-54866y9.018a0$8d9D3A7O7F040N9 5z0V7A7C0haE6#7GaK8i7M30aA7*0`7T8g6)5z7W047YaN5J6=8Zaz883$7:aV7j1`6B6DaJa-7Pa+7L9=5z6N6Pa`6T6V6X5~7=aWaL5Ca#01aY0F6.b3a.a$040j6b7s8p4Y8r9K8t8F8v8H4G0$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

.128013kg[: r);S/q(lo4y,6b=ac1x5+ud3t28_Pw7evp-fh0%9mn]is050C0L0E0v0X0n0Y0f0w0n0v0Y0Y0u010E0X0N010406050Y0B0U0U0v0g0q040j0o0n0B0?0o0V050k0}0 11130{0N04051j1c1m0k1j0{0C0X0M0+0-0/0;0-0V0c0B0v0c0L0O0N0q0E0Q1a0f0Q0X0c0Q0n1O0Q0E0_050$0t0n0L1v0.0:011N1P1R1P0E1X1Z1V0E0g1k1J0+160Y0N0v0V0;0F011#1x010P0(0L0V0v0U0L1V1`1|211%241Z27290_0a0f0I0g0o0N0o0Y0X190V0f0!1^0g0g0L0w2u1c2c0V1k0k1J2H1;1?1=1W0C2e1y0X0V262r1V1s1u0,1$2R2T0V0o2X1V0N2A1k2F2H2.0|1{2v2Z222%0g100n1V0v1M2A0P0;030H0H0w2(0L1R2$0o0O0p0O0x0_0f0x1c0v2/2=0`2;2d2@1%2_2{2}2 0L3101333537392U3c0O1 040f0F3j3l1|3n2F2Q013s0v2|1k2~0Q303234360!3C2%3E0D3g0D3K2E3m0{3O3q0;3R3T053V3X3y3Z3B2S3D3d0p3g0p3,1d3.3o2?1w3r0o2`3S3u3W3w3Y3A3#3~3%3d0z3g0z442.3/2=3P3?4e3`3z3!384k3b3d0s3g0s4q463:493=4b3t3U3v3x4y3}3a3E0K3g0K4H3M4s3p4K3Q4M4d4O4f4Q3|4j4T3d0G3g0G4Y2G4!482!4%4c3@3_4g3{4i4A4/0O0T3g0T4@3N4t3;4|4N3^4P4h4z3$4C3e0R0_0x0R594_4u4(4~5g515i4B3E0x3f045A591n2,1c2X2K0C1?2P5c4z2W1t1k2+0L2-3m3-3M054z5U2d0X0C0;342F5z3u5$5(525j5+0f2i0L5.5x545B3,4J4{0b0_0!0P5W2G0f474u0P0_0w1N0P0P2A0H0M1O260L2A635!4`220^040m6l665c0V0_0E0L0y6x6s5}6o0_0e6l656C3r0t0_0Y1;6B5b4$6p0r6G6t4$6v040,3w6O4#4{6p6F453M6H6P4{0V6K046M0g6T6I0;6p0h6?6,220o0_0O020c0E0i6{6#2^6/6;756n1%6%6l0{6)2G665-015)2=3E3G5f7j4-533 3F205?5^4S7t7o0k3k0f7D6+763r6w6y6x356b6d0L7a3P6~040u7P5c0Y3G020l0B0o737Y7!737e6!2v7q0H5*3d3)4O7-5_7t3)5=285@7k5/5y7:1V7B3H7E6U5~0_0P4b7U6V0_0X8a4{0o0J8c1b7g3H85770_0g1|1E7+3P6p6r8k8m6J0_2h8s5c8u8B8b046x6z7O8w6@016_6`8k7F7b6^6E7*8K4t7-7/3c5,5%7}7@4l8Z7`297x4.7t412H7C7E8=8x3=8z0#1;8J2.8Q7Q0_7T8P8@3Q7I8I8E6$0_0d972^8c9b7c0_0W8U2:3O8X7m4m8!8,7s8(4n8*7|7r5:9n8:838=7D936W2S1s0w0L351Z62928L7R918}9C9d9L6|1%7R0S8e8n048A8V7G8S6q9e8^6X9J9)8M0_8O4r8s9l1|3E4E7=8#9v7 0O4E9t9p9w9~818;9A8~6u8_1-6e0!0w3S1D8|3ma74$9N9X7H9+6Z9#8R9.049aap4u8i9F9H6Y9K9j9T9%9h8k7faB5#9{7.9m0O4V9`a19}4Va08$7y8(aN3Ka69B8L6Wacae8r9S9$01aka)aq6W1Zaa9H2%0U0t6kau8C999-a/8`ab2Ba%ag5X8L6paE9;au9?0V3E4;aOaT8-8(4;aS9|54bdaXaY9Q04a?a^b36493a,9Pb50_8vaHa.a98{0Hbra_bB8ta|a`8Fa:8{9-b6al0;7R0AbR9404a$0-a(bIa{049:ahbv0_9Wa-3P0U0X0_0F4GaF9=aJ8Y56bebk7t56bj7~54b{bna6bpbN6e6a0X6c2Abt8l9M90bV6WbG9Hc7cd936patb#8FcjbP9g9i5V9kb_aL5o9obf9q5kcAc08%cE5m9yaYai6-957Kc9cbcdcM6}cgb-a88G7Jay7MbHahcT9U0_bUcWbMa c!ca7NcdaGcw8Wcy9@3d5AcBb}8(c|cGaUcE5{828?8L5 042A0E0B0g8jbxaCbW8HcPc#c=6s0k5Z5F5T5H5Q1c0E5Kdt2N2I0v1Ydq0k5I7f0!0$0(0Y04.