Chiffrement de Vigenère
I. Le principe

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_lettre
dont voici un extrait :
nombre_lettre = {0: 'a', 1: 'b', 2: 'c', 3: 'd', etc...}
.128522.128013fdq6nmi7é4=]3y_ 9pu0ts5{[/v1b(P;l)gow-OahR:+rS2cek}050d0Y0w0P0i0I0x0r0X0I0P0x0x0m010w0i0t010406050x0u0h0h0P0U0p040V0L0I0u0^0L0g0r020P0h0t0H0r0R0Y120U0e0u0Y0x050B0 1113150}0t04051A1t1D0B1A0}0d0i0C0-0/0;0?0/0g0K0u0P0K0Y0N0t0p0w0Q1c0r0Q0i0K0Q0I1)0Q0w0{050(0E0I0Y1M0:0=011(1*1,1*0w1=1@1:0w0U1B1!0-180x0t0P0g0?0W011_1O010c0*0Y0g1g0Y1:2b2d2i1{2l1@2o0h2q040b0r0G0U0L0t0L0x0i1b1d0$290U0U0Y0X2L1t2s0g1B0B1!2X2527261;0d2u1P0i0g2n2I1:1J1L0.1`2+2-0g0L2;1:0t2Q1B2V2X310~2c1d2?2j2`0U120I1:0P1%2Q0c0?030q0q0X2{0Y1,2_0L0N0v0N0D0{0D1t0P32350|342t371{393b3d3f0Y3h013j3l3n3p2.3s0N2g040W3y3A2d3C2V2*013H0P3c1B3e0Q3g3i3k3m0$3R2`3T0o0{0o3Y2U3B0}3$3F0?3)3+053-3/3N3;3Q2,3S3t0l0{0l3}1u3 3D361N3G0L3a3*3J3.3L3:3P3?4c3^3t0y0{0y4i331G2 1t2;2!0d272)42013=2A0#1K1B2~0Y303B3~3!054Q4X2t0i0d0?3k2V3T3v3,0r4)4+4w3o4y3r3t3v0r2y0Y4?4Q3@4`3u1:0B3z4l3%0Z0{0$0c4Z2W584O0M0{0r5e4%4m2@3(0c0{0X2Q0Y0q2`0h0E2Q0q1@212Q5l5g4n0?0`040F0J0S5l0}4j4!3$4=014,353T3V464;4*5T4@525W2h4~504b3q5(2X3z0r5;5k415G3(5b0i3m5l5?353%0L0{0m5}5F5o5I0z0!5N5E5R5!5U2d3_3J5S4a4x5-3t3`4}2p5+6k4d0N3`5/045=5~3E5^5a040c4p645@5o0g0{0i6F5 4O0L5i042,6L6z6H0E0{0U2d1V6b6M5^5I0F6!6T2j0h0i0{0W0f6)5n2j5I5L6a5P5f6c4?4-4e6h6d5$4_3T4f6o2z6q4^6l0N4f6v6x6x65385`5|6`5m3%5I0A6;3%6I6Q7p4O5I0n7t5^6104637k6y6=3G6V040X3.7x660{6(7k7g1{6,0{0s0j6S7E0?7z0T7V7q6J7K6?0{0J6_336|5#6~0N4B4:6i727a4B764 5#51734A555:5=7P0?6B2Q0w0u0U0g7!4O7r1J7j315O4F4$1E4H0B4J1t0w4L8o2%2Y0P1?4W4I4T1z7l4O2Q0h0q0c0P0Z5u0Q6u1l1n1p1r0r5M7O1G3C1A0a0r0O1d0t0Y1a0r0P0u0;0i0-0U0k0Y0U0r1@0r8e2L2o0i2Q0r2n291h8,0Q2n2J1$8Q1H4S2=5^1Q1S1U1W1Y1!1$1}1+1-1/8A5^2w2n2p0{0G1Z1#8a7O4V5m3Z5f8j7-6e0g3u547=717}5-0D547`785%9J4|4t3M3O9H3S9O809k5o6B5c7%1{6P5k7O6G385q7H5t5v0L5x5z5B250Y9#5H7M6^7k8h4Y9A0q4-9J5X3e7?9T3^a35)6p7|5,9U3U2h9Q4va73ra97d829*1{850%889t317D7m0{0z9_5_7s9)6#7L048Qau833(7G7I0Uaz6%az7R047T8b7y0{7Z7CaI7r6KaC6*1{6@aT9Y0{6DaMaXao437$a.aD2j6O6Jat3Bav8c7G6X1R9^a#7W01aOb23%aQ6/aN7)699}5E0B8j4G8w8m8y4I0%0)0+04.
correspondance lettre - nombre
Compléter le script suivant qui permet de constituer le dictionnaire lettre_nombre
dont voici un extrait :
lettre_nombre = {'a': 0, 'b': 1, 'c': 2, 'd': 3, etc...}
.128522.128013fdq6nmi7é4=]3y_ 9puts5{[/v1b(P;l)gow-OahR:+rS2cek}050d0X0v0O0i0H0w0r0W0H0O0w0w0m010v0i0t010406050w0u0h0h0O0T0p040U0K0H0u0@0K0g0r020O0h0t0G0r0Q0X110T0e0u0X0w050A0~1012140|0t04051z1s1C0A1z0|0d0i0B0,0.0:0=0.0g0J0u0O0J0X0M0t0p0v0P1b0r0P0i0J0P0H1(0P0v0`050%0D0H0X1L0/0;011%1)1+1)0v1;1?1/0v0T1A1Z0,170w0t0O0g0=0V011^1N010c0)0X0g1f0X1/2a2c2h1`2k1?2n0h2p040b0r0F0T0K0t0K0w0i1a1c0#280T0T0X0W2K1s2r0g1A0A1Z2W2426251:0d2t1O0i0g2m2H1/1I1K0-1_2*2,0g0K2:1/0t2P1A2U2W300}2b1c2=2i2_0T110H1/0O1$2P0c0=030q0q0W2`0X1+2^0K0M0V0M0C0`0C1s0O31340{332s361`383a3c3e0X3g013i3k3m3o2-3r3r0`0V3x3z2c3B2U2)013G0O3b1A3d0P3f3h3j3l0#3Q2_3S0o0`0o3W2T3A0|3!3E0=3%3)053+3-3M3/3P2+3R3s0l0`0l3{1t3}3C351M3F0K393(3I3,3K3.3O3;4a3?3s0x0`0x4g321F2~1s2:2Z0d262(40013:2z0!1J1A2}0X2 3A3|3Y054O4V2s0i0d0=3j2U3S3u3*0r4%4)4u3n4w3q3s3u0r2x0X4;4O3=4^3t1/0A3y4j3#0Y0`0#0c4X2V564M0L0`0r5c4#4k2?3$0c0`0W2P0X0q1?202P0q2_0h0D2P5j5e4l0=0_040E0I5j5i3 5E015G0R5j0|4h4Y3!4:014*343S2f4.5W484v3p5!2g4|4~495*3s5#3W0r5@5L343#0g0`5u245s5y5A0X5K5D5m0K0`0m645M5m5G0y0Z5R5C5V4(5X0q4+3s3^5$6j5(4?5:0M3^4{2o5.5)4b6u533y5^5_3D5N58040c4n6a5`4M5|040i6M6G665g6Q0g6S5l370D0`0T2c1U6h6N5N5G0E6*6T2i0h0i3U0f6/6Z1`5G0I5Q5T2V5S326i4;6m0M4d6p6y6s6A4d6w2y79503S775?6E5^65375}0$5 5x0K5z5B6 5k3#5G0z6_5{6#040W3,7A4M6-7G5N6P6R7v6F6`0=67040S6Y3#6=0`0s0j7J6c0`0I0n7U4M7R697N7m3F0`7M30714W736k754z786k4 4@3S4z7d4}7}5/6A7{7j5@7.0=6I2P0v0u0T6X7-6b7n045~5w617u7=5C0A4!1D4F0A4H1s0v4J8y2$2X0O1=4U4G4R1y7w4M2P0h0q0c0O0Y5s0P6o1k1m1o1q0r6~4D1G1B040a0r0N1c0t0X190r0O0u0:0i0,0T0k0X0T0r1?0r1I2R0i1b2n0i2P0r2m281g8_0P2m2I1#6~8$2:3#1P1R1T1V1X1Z1#1|1*1,1.8K5N2v2m2o0`0F1Y1!8h324T5k3X5d8t7^5Y2c6u527|6r7g0o52827f7 9T4`4r3L3N7~5*9Y6C9v5m6I5a7!2i6V5i7v8a5n5p5r5t7p8n7s629/6{0`5I8!4i9?9L6l5Z9T5=3d5%4=9S3T9V846z3?aa2g9!4t9%3Ral2W6D7l8j1`8c0$8f9E3A7O7x0`0ya0417C7E0TaG5Oa2aL7L7)5N7R7T8i6+5m7W047YaL6|a43YaC6O7:aQ9,0`6KaKaU6:7/6Qa+2i0K6V2+a@3F7C6%1Q63a6aV2i7Ib2a;0=aX0V6^b67PaM040I6f7v7?4Y8s3m2W9G8H0B3B8w0$0(0*04.
Chiffrement de Vigenère
Compléter le script suivant :
.128013fdq6nmi74=]3y_ 9pu08ts5[/v1b(P)l;go%w-ah:+rxS2cek,050c0W0v0N0h0G0w0p0V0G0N0w0w0k010v0h0r010406050w0s0g0g0N0R0n040T0J0G0s0?0J0f050z0}0 11130{0r04051j1c1m0z1j0{0c0h0A0+0-0/0;0-0f0I0s0N0I0W0M0r0n0v0O1a0p0O0h0I0O0G1O0O0v0_050$0C0G0W1v0.0:011N1P1R1P0v1X1Z1V0v0R1k1J0+160w0r0N0f0;0U011#1x010b0(0W0f0N0g0W1V1`1|211%241Z27290_0a0p0E0R0J0r0J0w0h190f0p0!1^0R0R0W0V2u1c2c0f1k0z1J2H1;1?1=1W0c2e1y0h0f262r1V1s1u0,1$2R2T0f0J2X1V0r2A1k2F2H2.0|1{2v2Z222%0R100G1V0N1M2A0b0;030o0o0V2(0W1R2$0J0M0j0M0B0_0p0B1c0N2/2=0`2;2d2@1%2_2{2}2 0W3101333537392U3c0M1 040p0U3j3l1|3n2F2Q013s0N2|1k2~0O303234360!3C2%3E0m3g0m3K2E3m0{3O3q0;3R3T053V3X3y3Z3B2S3D3d0j3g0j3,1d3.3o2?1w3r0J2`3S3u3W3w3Y3A3#3~3%3d0x3g0x442.3/2=3P3?4e3`3z3!384k3b3d0e3g0e4q463:493=4b3t3U3v3x4y3}3a3E0i3g0i4H3M4s3p4K3Q4M4d4O4f4Q3|4j4T3d0u3g0u4Y2G4!482!4%4c3@3_4g3{4i4A4/0M0q3g0q4@3N4t3;4|4N3^4P4h4z3$4C3e0t0_0B0t594_4u4(4~5g515i4B3E0B3f045A591n2,1c2X2K0c1?2P5c4z2W1t1k2+0W2-3m3-3M054z5U2d0h0c0;342F5z3u5$5(525j5+0p2i0W5.5x545B3,4J4{0X0_0!0b5W2G473P0L3g635!4`2^0b0_0V1N0b0b2A0o0A1O260W2A69655c0^040D6q5}2^0_0v0W0S6A6w5b4$6t0P690p6r4$0f0C0_0w1;6E4#4{6t0Y6J6L4{0f6e1Z62455X6x1%6H6X6*3=6O046Q0R6-6F6U0_0F6@6T220J0_0M020I0v0H6|6b3r6:6=763P6,6(4^6S2v5-015)2=3E3G5f7i4-533 3F205?5^4S7s7n0z3k0p7C6K6.3Q6z6B6A356g6i0W7b5c6 040k7O4$0w3G020d0s0J747X7Z74690{7e6a0p7p0o5*3d3)4O7.5_7s3)5=285@7j5/5y7;1V7A3H7D6Y225 040b4b7T6Z0_0h8c6~67042S8g780_0R1|1E7g7c0_6v7+868m042h8r6s8t8A6M7H6C7N8v7F6t0F6{7+7E6^227d4r8r7.7:3c5,5%7~7^4l8W7{297w4.7s412H7B7D8/8w3=0_1Z1-6p8N8;017Q7S8`7F6!046A8G8D6_040y956y8j996+0_0l7)8T8Y7k1|3E4n7?9i7 544n8%7}7q5:4m828.8/7C8{912S1s0V0W356$8l0;8}9J7G9b8 8P1%7Q0K9M6N8?269c0;6t8u2:906#3w9Y018K9g8I4t8U7l4D8X8)7r8#4E9s9@9v0M4E8-849z8O6}3r9W8^9G0!0V3S1D8H2.a3779K0_8~ae9B9(6%9$9Q9Z0_989.a48=8j0f9E9G0,9)atag9+9e9-ao5#9o8V4V9n9|800M4V9{8Z7x8#aL3Ka29A9%04a9ab8q9Pau8|ai9Ua61;9G2%0g0C8_aHaD6tasa@4ua-6ja#0-a%a{8B049f7+7*a{9:9k4:9?aS8*8#4;aR9uaO4;a0aXafa|04a:a=ad3mbn7Pa+a(a^8CaCbo8@a.0obqa?5V8Jar9*91bCbG6)apaEb49M7Q0Qa,a!2Ba$bsbOa)9,bx3P9S9M0g0h0_0U4Gb69h5.8V56aMbd9^5k56bh9p7sb@aWaXal8y0#bD6f0h6h2AbZ2Gbu4$9Lb%5c91bF9GbMcb7,b3a`bHbPci0Ja;bN64bIbRb:bAb90f5z5mb^bi5`5mb}8!5k5o9xa19zc3937Jc7c9cmcd4{cfakaZcRaz7Lcv848{bTbVcl7Kc87Mcmb7cqaIb=9;3e5{2~7@aTcL3fcJc~5z5{838:7F882A0v0s0R1bcg8E927Ic$c/c(c=5X0z5Z5F5T5H5Q1c0v5Kdt2N2I0N1Ydq0z5I7*0!0$0(0w04.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)