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.128013w]itkc[vo-)Oylqb0p_P3(a;+g=R/m}4rse97Sf{d :126é5nuh050Q0K0f0y0e0p0J0R0h0p0y0J0J0C010f0e0t010406050J0Z0F0F0y0I0o040N0k0p0Z0^0k0Y0R020y0F0t0z0R0D0K120I0q0Z0K0J050E0 1113150}0t04051A1t1D0E1A0}0Q0e0j0-0/0;0?0/0Y0B0Z0y0B0K0l0t0o0f0!1c0R0!0e0B0!0p1)0!0f0{050(0r0p0K1M0:0=011(1*1,1*0f1=1@1:0f0I1B1!0-180J0t0y0Y0?0U011_1O010O0*0K0Y1g0K1:2b2d2i1{2l1@2o0F2q040b0R0v0I0k0t0k0J0e1b1d0$290I0I0K0h2L1t2s0Y1B0E1!2X2527261;0Q2u1P0e0Y2n2I1:1J1L0.1`2+2-0Y0k2;1:0t2Q1B2V2X310~2c1d2?2j2`0I120p1:0y1%2Q0O0?030u0u0h2{0K1,2_0k0l0s0l0T0{0T1t0y32350|342t371{393b3d3f0K3h013j3l3n3p2.3s0l2g040U3y3A2d3C2V2*013H0y3c1B3e0!3g3i3k3m0$3R2`3T0w0{0w3Y2U3B0}3$3F0?3)3+053-3/3N3;3Q2,3S3t0H0{0H3}1u3 3D361N3G0k3a3*3J3.3L3:3P3?4c3^3t0X0{0X4i331G2 1t2;2!0Q272)42013=2A0#1K1B2~0K303B3~3!054Q4X2t0e0Q0?3k2V3T3v3,0R4)4+4w3o4y3r3t3v0R2y0K4?4Q3@4`3u1:0E3z4l3%0g0{0$0O4Z2W584O0c0{0R5e4%4m2@3(0O0{0h2Q0K0u2`0F0r2Q0u1@212Q5l5g4n0?0`040x0m0S5l0}4j4!3$4=014,353T3V464;4*5T4@525W2h4~504b3q5(2X3z0R5;5k415G3(5b0e3m5l5?353%0k0{0C5}5F5o5I0P0G5N5E5R5!5U2d3_3J5S4a4x5-3t3`4}2p5+6k4d0l3`5/045=5~3E5^5a040O4p645@5o0Y0{0e6F5 4O0k5i042,6L6z6H0r0{0I2d1V6b6M5^5I0x6!6T2j0F0e0{0U0V6)5n2j5I5L6a5P5f6c4?4-4e6h6d5$4_3T4f6o2z6q4^6l0l4f6v6x6x65385`5|6`5m3%5I0i6;3%6I6Q7p4O5I0d7t5^6104637k6y6=3G6V040h3.7x660{6(7k7g1{6,0{0L0M6S7E0?7z0A7V7q6J7K6?0{0m6_336|5#6~0l4B4:6i727a4B764 5#51734A555:5=7P0?6B2Q0f0Z0I0Y7!4O7r1J7j315O4F4$1E4H0E4J1t0f4L8o2%2Y0y1?4W4I4T1z7l4O2Q0F0u0O0y0g5u0!6u1l1n1p1r0R5M7O1G3C1A0a0R0n1d0t0K1a0R0y0Z0;0e0-0I0W0K0I0R1@0R8e2L2o0e2Q0R2n291h8,0!2n2J1$8Q1H4S2=5^1Q1S1U1W1Y1!1$1}1+1-1/8A5^2w2n2p0{0v1Z1#8a7O4V5m3Z5f8j7-6e0Y3u547=717}5-0T547`785%9J4|4t3M3O9H3S9O809k5o6B5c7%1{6P5k7O6G385q7H5t5v0k5x5z5B250K9#5H7M6^7k8h4Y9A0u4-9J5X3e7?9T3^a35)6p7|5,9U3U2h9Q4va73ra97d829*1{850%889t317D7m0{0P9_5_7s9)6#7L048Qau833(7G7I0Iaz6%az7R047T8b7y0{7Z7CaI7r6KaC6*1{6@aT9Y0{6DaMaXao437$a.aD2j6O6Jat3Bav8c7G6X1R9^a#7W01aOb23%aQ6/aN7)699}5E0E8j4G8w8m8y4I0%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.128013w]itkc[vo-)Oylqbp_P3(a;+g=R/m}4rse97Sf{d :126é5nuh050P0J0f0x0e0p0I0Q0h0p0x0I0I0B010f0e0s010406050I0Y0E0E0x0H0o040M0k0p0Y0@0k0X0Q020x0E0s0y0Q0C0J110H0q0Y0J0I050D0~1012140|0s04051z1s1C0D1z0|0P0e0j0,0.0:0=0.0X0A0Y0x0A0J0l0s0o0f0Z1b0Q0Z0e0A0Z0p1(0Z0f0`050%0r0p0J1L0/0;011%1)1+1)0f1;1?1/0f0H1A1Z0,170I0s0x0X0=0T011^1N010N0)0J0X1f0J1/2a2c2h1`2k1?2n0E2p040b0Q0u0H0k0s0k0I0e1a1c0#280H0H0J0h2K1s2r0X1A0D1Z2W2426251:0P2t1O0e0X2m2H1/1I1K0-1_2*2,0X0k2:1/0s2P1A2U2W300}2b1c2=2i2_0H110p1/0x1$2P0N0=030t0t0h2`0J1+2^0k0l0T0l0S0`0S1s0x31340{332s361`383a3c3e0J3g013i3k3m3o2-3r3r0`0T3x3z2c3B2U2)013G0x3b1A3d0Z3f3h3j3l0#3Q2_3S0v0`0v3W2T3A0|3!3E0=3%3)053+3-3M3/3P2+3R3s0G0`0G3{1t3}3C351M3F0k393(3I3,3K3.3O3;4a3?3s0W0`0W4g321F2~1s2:2Z0P262(40013:2z0!1J1A2}0J2 3A3|3Y054O4V2s0e0P0=3j2U3S3u3*0Q4%4)4u3n4w3q3s3u0Q2x0J4;4O3=4^3t1/0D3y4j3#0g0`0#0N4X2V564M0c0`0Q5c4#4k2?3$0N0`0h2P0J0t1?202P0t2_0E0r2P5j5e4l0=0_040w0m5j5i3 5E015G0R5j0|4h4Y3!4:014*343S2f4.5W484v3p5!2g4|4~495*3s5#3W0Q5@5L343#0X590e3l5K5D5m0k0`0B605M5m5G0O0F5R5C5V4(5X0t4+3s3^5$6f5(4?5:0l3^4{2o5.5)4b6q533y5^5_3D5N58040N4n665`4M5|040e6I6C625g6M0X6O5l370r0`0H2c1U6d6J5N5G0w6$6P2i0E0e3U0U6+6V1`5G0m5Q5T2V5S326e4;6i0l4d6l6u6o6w4d6s2y75503S735?6A5^61375}5 6{5k3#5G0i6=5{6X040h3,7r4M6)7x5N6L6N7m6B6?0=63040z6U3#6.0`0K0L7A680`0m0d7L4M7I657E7i3F0`7D306}4W6 6g714z746g4 4@3S4z794}7;5/6w7/7f5@7#0=6E2P0f0Y0H6T7!677j041I7l7)5C0D4!1D4F0D4H1s0f4J8n2$2X0x1=4U4G4R1y7n4M2P0E0t0N0x0g5s0Z6k1k1m1o1q0Q6`4D1G1B040a0Q0n1c0s0J190Q0x0Y0:0e0,0H0V0J0H0Q1?0Q8d2K2n0e2P0Q2m281g8+0Z2m2I1#6`8R2:3#1P1R1T1V1X1Z1#1|1*1,1.8z5N2v2m2o0`0u1Y1!88324T5k3X5d8i7,5Y2c6q527:6n7c0v527_7b7?9G4`4r3L3N7=5*9L6y9i5m6E5a7R2i6R5i7m815n5p5r5t0$245s5y5A0J9Y6@0`5I8P4i9$9y6h5Z9G5=3d5%4=9F3T9I7{6v3?9 2g9N4t9Q3Raa2W6z7h8a1`830$869r3A7F7o0`0O9=417t7v0Hav5O9@aA7C7W5N7I7K896%5m7N047PaA6^9_3Yar6K7%aF9V0`6GazaJ6,7$6MaW2i0k6R2+a)3F7t6Z1Q9;9{aK2i7za@a$0=aM0T6;a{7GaB040m6b7m7*4Y8h3m2W9t8w0j3B8l0$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

.128013w]itkc[v8o-)yl0bxpq_P3(a;+g=/m4r%se97Sf,d 612:5nuh050P0J0e0y0d0o0I0Q0g0o0y0I0I0C010e0d0s010406050I0X0E0E0y0G0n040M0k0o0X0?0k0W050D0}0 11130{0s04051j1c1m0D1j0{0P0d0i0+0-0/0;0-0W0B0X0y0B0J0l0s0n0e0Y1a0Q0Y0d0B0Y0o1O0Y0e0_050$0q0o0J1v0.0:011N1P1R1P0e1X1Z1V0e0G1k1J0+160I0s0y0W0;0T011#1x010N0(0J0W0y0E0J1V1`1|211%241Z27290_0a0Q0v0G0k0s0k0I0d190W0Q0!1^0G0G0J0g2u1c2c0W1k0D1J2H1;1?1=1W0P2e1y0d0W262r1V1s1u0,1$2R2T0W0k2X1V0s2A1k2F2H2.0|1{2v2Z222%0G100o1V0y1M2A0N0;030u0u0g2(0J1R2$0k0l0F0l0S0_0Q0S1c0y2/2=0`2;2d2@1%2_2{2}2 0J3101333537392U3c0l1 040Q0T3j3l1|3n2F2Q013s0y2|1k2~0Y303234360!3C2%3E0w3g0w3K2E3m0{3O3q0;3R3T053V3X3y3Z3B2S3D3d0F3g0F3,1d3.3o2?1w3r0k2`3S3u3W3w3Y3A3#3~3%3d0V3g0V442.3/2=3P3?4e3`3z3!384k3b3d0R3g0R4q463:493=4b3t3U3v3x4y3}3a3E0L3g0L4H3M4s3p4K3Q4M4d4O4f4Q3|4j4T3d0j3g0j4Y2G4!482!4%4c3@3_4g3{4i4A4/0l0K3g0K4@3N4t3;4|4N3^4P4h4z3$4C3e0p0_0S0p594_4u4(4~5g515i4B3E0S3f045A591n2,1c2X2K0P1?2P5c4z2W1t1k2+0J2-3m3-3M054z5U2d0d0P0;342F5z3u5$5(525j5+0Q2i0J5.5x545B3,4J4{0f0_0!0N5W2G473P0b3g635!4`2^0N0_0g1N0N0N2A0u0i1O260J2A69655c0^040x6q5}2^0_0e0J0r6A6w5b4$6t0U690Q6r4$0W0q0_0I1;6E4#4{6t0O6J6L4{0W6e1Z62455X6x1%6H6X6*3=6O046Q0G6-6F6U0_0m6@6T220k0_0l020B0e0z6|6b3r6:6=763P6,6(4^6S2v5-015)2=3E3G5f7i4-533 3F205?5^4S7s7n0D3k0Q7C6K6.3Q6z6B6A356g6i0J7b5c6 040C7O4$0I3G020t0X0k747X7Z74690{7e6a0Q7p0u5*3d3)4O7.5_7s3)5=285@7j5/5y7;1V7A3H7D6Y225 040N4b7T6Z0_0d8c6~67042S8g780_0G1|1E7g7c0_6v7+868m042h8r6s8t8A6M7H6C7N8v7F6t0m6{7+7E6^227d4r8r7.7:3c5,5%7~7^4l8W7{297w4.7s412H7B7D8/8w3=0_1Z1-6p8N8;017Q7S8`7F6!046A8G8D6_040h956y8j996+0_0c7)8T8Y7k1|3E4n7?9i7 544n8%7}7q5:4m828.8/7C8{912S1s0g0J356$8l0;8}9J7G9b8 8P1%7Q0H9M6N8?269c0;6t8u2:906#3w9Y018K9g8I4t8U7l4D8X8)7r8#4E9s9@9v0l4E8-849z8O6}3r9W8^9G0!0g3S1D8H2.a3779K0_8~ae9B9(6%9$9Q9Z0_989.a48=8j0W9E9G0,9)atag9+9e9-ao5#9o8V4V9n9|800l4V9{8Z7x8#aL3Ka29A9%04a9ab8q9Pau8|ai9Ua61;9G2%0E0q8_aHaD6tasa@4ua-6ja#0-a%a{8B049f7+7*a{9:9k4:9?aS8*8#4;aR9uaO4;a0aXafa|04a:a=ad3mbn7Pa+a(a^8CaCbo8@a.0ubqa?5V8Jar9*91bCbG6)apaEb49M7Q0Aa,a!2Ba$bsbOa)9,bx3P9S9M0E0d0_0T4Gb69h5.8V56aMbd9^5k56bh9p7sb@aWaXal8y0#bD6f0d6h2AbZ2Gbu4$9Lb%5c91bF9GbMcb7,b3a`bHbPci0ka;bN64bIbRb:bAb90W5z5mb^bi5`5mb}8!5k5o9xa19zc3937Jc7c9cmcd4{cfakaZcRaz7Lcv848{bTbVcl7Kc87Mcmb7cqaIb=9;3e5{2~7@aTcL3fcJc~5z5{838:7F882A0e0X0G1bcg8E927Ic$c/c(c=5X0D5Z5F5T5H5Q1c0e5Kdt2N2I0y1Ydq0D5I7*0!0$0(0I04.