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.128522f:6Sd=4yr/opg2mcb1w9R37v{e[ lO+P5)ti]kné;ua(}_shq050g0B0K0S0L0E0W0D0r0E0S0W0W0h010K0L0n010406050W0R0q0q0S0k0j040f0m0E0R0?0m0O0D020S0q0n0Q0D0w0B100k0Y0R0B0W050l0}0 11130{0n04051y1r1B0l1y0{0g0L0z0+0-0/0;0X0L0o0X0E1P0X0K0_050$0s0E0B1K0.0:011O1Q1S1Q0K1Y1!1W0K0k1z0K0X0+160W0n0S0O0;0p011$1M010c0(0B0O1e0B1W1|1~231(261!290q2b040a0D0H0k0m0n0m0W0L191b0!1`0k0k0B0r2w1r2d0O1z0l1^2I1=1@1?1X0g2f0;1S0O282t1W1H1J0,1%2S0L2U0O0m2Y1W0n2B1z2G2I2:0|1}1b2!242)0k100E0_0t2F2@0`2?2e2_1(2{2}0_0p311~332G2R01380S2~040x3c2H0{3f360;3i3k0i3n3e2@3g3t0_0I3w1C2.1r2Y2L0g1@2Q3r010r2*2l0Z1I1z2-0B2/323D3O0!3W351L1(0N0_0!0c3D3q3%0;0u0_0D3-3y3M0O0c0_0r2B0B0V2)0q0s2B0V1!1.2B3@3$2#010^040T0J0d3w060D4k3?3.4b0O3*0L3O3w4m3^3/010m0_0h4t342^4w4d0A0U4i4l4u4a243)040c0m0k4B4n2`0_0L4S4v4b0m3;042%4X4L370s0_0k1~0o0B494D4b4d0T4;3g0q0L3a0e4_3M4d4g4I4J4l4C3z4q4s1s3X4T1(4d0C4 4w4p4$5g4?0_0M5k244y044A5a3d4K4=2`4+040r0X4R5t2H56500_4^5D3#5w1(4{0_0v0y4(5L0;5q0G5R575j5J5F4E0_0J534k5!4b4N2B0K0R0k0O5W3_580m4i1r3Z3V3E5|0l3H1r0K3J612O2J0S1Z5~3H1x5K3g2B0q0V0c0S0N3 0X0x0_1j1l1n1p0D4h5Z1E331y0b0D0F1b0n0B180D0S0R0/0L0+0k0P0B0k0D1!0D1H2D0L1a290L2B0D281`1f6L0X282u1a6s1C332Y3g1*1R1T1V6c3M2h282a0_2n0f3}0@0K2o0j1^1a3D3U5K2;3X5{6^4w4N3+5o1(4#3?5Z5c3s3{5z3~400m4244461=4:7l4Y244@525J4j557m015,0#5/5;5J5v3g4F7h3s4V7Q4c0_6t2:7N3_5y5A5C2=7G4@7T5N045P5=4w5U7.4o7S7y4)0;517;4M0_4P7$327Y5h7?7X5*5p4#4%7M854*4,4.7x7%7z5d5H7*4|040p4~7@5S7U040J4H7D5`3P2I783G3S0{5 0#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.128522f:6Sd=4yr/opg2mcb1w9R37v{e[ lO+P5)ti]kné;ua(}_shq050g0B0K0S0L0E0W0D0r0E0S0W0W0h010K0L0n010406050W0R0q0q0S0k0j040f0m0E0R0?0m0O0D020S0q0n0Q0D0w0B100k0Y0R0B0W050l0}0 11130{0n04051y1r1B0l1y0{0g0L0z0+0-0/0;0X0L0o0X0E1P0X0K0_050$0s0E0B1K0.0:011O1Q1S1Q0K1Y1!1W0K0k1z0K0X0+160W0n0S0O0;0p011$1M010c0(0B0O1e0B1W1|1~231(261!290q2b040a0D0H0k0m0n0m0W0L191b0!1`0k0k0B0r2w1r2d0O1z0l1^2I1=1@1?1X0g2f0;1S0O282t1W1H1J0,1%2S0L2U0O0m2Y1W0n2B1z2G2I2:0|1}1b2!242)0k100E0_0t2F2@0`2?2e2_1(2{2}0_0p311~332G2R01380S2~040x3c2H0{3f360;3i3k0i3n3e2@3g3t0_0I3w1C2.1r2Y2L0g1@2Q3r010r2*2l0Z1I1z2-0B2/323D3O0!3W351L1(0N0_0!0c3D3q3%0;0u0_0D3-3y3M0O0c0_0r2B0B0V1!1.2B0V2)0q0s2B3@3$2#010^040T0J3w3?3.4b4d0d3w060D4p4i3^3/3h3*0L3O4h342^4t0m0_0h4y4j244d0A0U4n4q4r4a243)040c0m0k4F4s4b0O0_0L4V4O1(0m3;042%4#4A4X0s0_0k1~0o0B494-4H0_0T4^3g0q0L3a0e4}3M4d0J4m1s324o4M4q4z3z4v4x583d5d540_0C534t0O4/040r0X4U5h2H5j4t4d4|5v3#4_374Z4,3g4C040G5G3M4 0_0v0y5n4k0_0J0M5L4B4D5W4X5F5B5a4p5x4b4Q2B0K0R0k0O5Z2`5f0m4n1r3Z3V3E5{0l3H1r0K3J602O2J0S1Z5}3H1x5C3g2B0q0V0c0S0N3 0X0x0_1j1l1n1p0D572=1E331y0b0D0F1b0n0B180D0S0R0/0L0+0k0P0B0k0D1!0D1H2D0L1a290L2B0D281`1f6K0X282u1a6r1C332Y3g1*1R1T1V6b3M2h282a0_2n0f3}0@0K2o0j1^1a3D3U5C2;3X5`6@4t4Q3+5R244)3?5B5)2`3{5r3~400#1=3 45474@7k4G1(5z564L5c7y0;5+0#5.5:5B4N5D0;4I7g375q5s5u2=7E4c4{7P3s5#2:7L5H0_5K7K7l1(5N045P7Y7W047B7*7V4Y4*5;3(0_4S7T327$3_7!807+0;4(4Z7J7#853h5q4;0O4?7:5z7:7-0p527x4W4`7=4K5$5_3P2I773G3S0{5~0#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

.128013f06S:d=%4-yr/oxpg2mcb1w937ve[ l,8+P5)ti]kn;ua(_shq050g0C0M0T0N0F0W0E0u0F0T0W0W0h010M0N0q010406050W0S0t0t0T0m0l040e0o0F0S0?0o0Q050n0}0 11130{0q04051j1c1m0n1j0{0g0N0B0+0-0/0;0X0N0r0X0F1A0X0M0_050$0v0F0C1v0.0:011z1B1D1B0M1J1L1H0M0m1k0M0X0+160W0q0T0Q0;0s011N1x010b0(0C0Q0T0t0C1H1*1,1;1P1@1L1`1|0_0a0E0J0m0o0q0o0W0N190Q0E0!1(0m0m0C0u2h1c1 0Q1k0n1$2u1Z1#1!1I0g210;1D0Q1_2e1H1s1u0,1O2E0N2G0Q0o2K1H0q2n1k2s2u2Y0|1+2i2M1=2R0m100F0_0E0w2r2$0`2#202(1P2*2,2.0s2;1,2?2s2D012{0T2-040E0z2 2t0{322_0;35370E0j3b312$333h2.0K3l3d3n3f340o2+362.0d3s2@2%1w2`3x2|380A3C3e3F3g3H3z380H3L3u3N3w3y3i0y3T2^3V3p040w0c3!3E2N3W3I0w2:1d2=1n2W1c2K2x0g1#2C3v0u2S1}1k3`1l3^2!3=3005400!2X3U3-0P0_0!0b3l3D330x2.4k3M3-0Q0b0_0u1z0b0b2n0V0B1A1_0C2n4p4e1=0^040U4G3#4r0_0M0C0p4Q4M3,4I0_0f3l0E4l3v0Q0v0_0W1Z4U334J0G4Z4#3$4u1L4j482t4;3-4J4Y4_384{2)4(044*0m4:4q4W040L574H1P0o0_0k020r0M0R5c4N524)4+4 4!581P4}3s0E5x5s5d3g4P4R4Q0V4v0N4x4F5r515e0_0h5m4V1P0W1/04020Y0S0o5k5V5X5k5w5y5L0;4g040b3x5P3o0_0N5/3v0o4n042P5?3$530m1,0r0C4,3v4J4L4 5)345324633V656c4O044Q4S62675t0;4J0L5b5K6m015v4 065y6x5z5n2`0_1L1V5J2Y6z5Q0;5f045O6r5A345C6j6f590D6S6B5`6V6n0_0O5%6y6H5:5`0Q1s0u0C5F4@5|3-6K6M6G680Q5;6;1=6K0i6|2`6a1_6Y6t0_662!6s6`040,0C4^786O6o6$6y6_6C0#1Z6.0!0u360T61706J5N7u6P7b6:6l7g0_6U7B6A5B6*6,6.7c7e3?6s4J6#6v6%5x7k047p7r7t6N7G016?7x7a6D7n0V2R0t0v6F7N7C047E7f7!7(7m4z7W0-7Y7@6I75047Q2Y6w7S7U7,7.6k6^6s7$7Z806e7F807_6E6.887/497O7D748j7n747P7x6K0I7%4h2o7X8a7:7!7h8e336~7x0t0N0_0s3B7R86797l8k5F4w4y0C8D306(5@7w8H4$0_8m6.7)8n4`8p7=8r8*0o7-8.4d8F6!7i6x7U6i5E5G5I8Z2t8#3V8d8b6O7a907K8W8_7T8c0_8y8(4=048-9d5H8X940`8~6s5+2n0M0S0m1b9k6g9c8V9p8_0{0n4b0C2u2V9K3_1t3{2x2A2v0T1K9N0n3`9H0!0$0(0W04.