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.128013ldy14{]ké/weibmc_:35qaPr}+ 7=9o[f;tRg26sSOh)(punv050d0n0K0x0o0c0P0C0r0c0x0P0P0E010K0o0V010406050P0W0q0q0x0z0e040Q0G0c0W0?0G0X0C020x0q0V0J0C0L0n100z0w0W0n0P050l0}0 11130{0V04051y1r1B0l1y0{0d0o0Y0+0-0/0;0S0o0M0S0c1P0S0K0_050$0p0c0n1K0.0:011O1Q1S1Q0K1Y1!1W0K0z1z0K0S0+160P0V0x0X0;0N011$1M010I0(0n0X1e0n1W1|1~231(261!290q2b040b0C0y0z0G0V0G0P0o191b0!1`0z0z0n0r2w1r2d0X1z0l1^2I1=1@1?1X0d2f0;1S0X282t1W1H1J0,1%2S0o2U0X0G2Y1W0V2B1z2G2I2:0|1}1b2!242)0z100c0_0f2F2@0`2?2e2_1(2{2}0_0N311~332G2R01380x2~040u3c2H0{3f360;3i3k0g3n3e2@3g3t0_0v3w1C2.1r2Y2L0d1@2Q3r010r2*2l0Z1I1z2-0n2/323D3O0!3W351L1(0j0_0!0I3w0C342^3%3s0I0_0r2B0n0s2)0q0p2B0s1!1.2B3D3q3;010^040U0T0t3w060C4f3.452#3h3*0o3O3-3/3g0G0_0E4o4i24480h0A4d4g4h3y3M3)040I0G0z4u4D460X0_0o4K3$4j0G0m4O0X4Q3:4j0X0p0_0z1~0M0n444L4j480U4+4R240q0o3a0O4:4Y4w0_4b4A4B4g4p3M4N041H4n1s3X4v1(480H4`3z4O5e3M480i5h464r044t583d4C4;374#040r0S4J5q2H52464.5l4j4?0_0F0D4X4q0_0B5L535g5A3#4{5b4}4 4f5C4j4F2B0K0W0z4W5S5s5U3s4l572:0{0l3Z3V3E5^0l3H1r0K3J5}2O2J0x1Z5`3H1x5T3g2B0q0s0I0x0j3`0S0u0_1j1l1n1p0C4c5S1C331y0a0C0R1b0V0n180C0x0W0/0o0+0z0k0n0z0C1!0C562w290o2B0C281`1f6H0S282u1a6o6r1G1I3g1*1R1T1V683M2h282a0_2n0Q3^0@0K2o0e1^1a3D3U5T2;3X5@6/464F3+5P4M3?5w3_3{0G3}3 411=4*6q5a0;4.4~5S4e517o015#0#5(5*2:5,3g4x5F2`5R2=7v486p7B5Z2`5v5x5z7I4,4|497F1(5H045J7b4S5N7#7G044P7n7T5V040T7(3(0_4H7R327C5Q7*7;0;4T4V7}3h5v4%0X4)7W7p0_4/7,5t0;7Y0N4_8b5-474}4z7s1r765_2I663G0#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.128013ldy14{]ké/weibmc_:35qaPr}+ 7=9o[f;tRg26sSOh)(punv050d0n0K0x0o0c0P0C0r0c0x0P0P0E010K0o0V010406050P0W0q0q0x0z0e040Q0G0c0W0?0G0X0C020x0q0V0J0C0L0n100z0w0W0n0P050l0}0 11130{0V04051y1r1B0l1y0{0d0o0Y0+0-0/0;0S0o0M0S0c1P0S0K0_050$0p0c0n1K0.0:011O1Q1S1Q0K1Y1!1W0K0z1z0K0S0+160P0V0x0X0;0N011$1M010I0(0n0X1e0n1W1|1~231(261!290q2b040b0C0y0z0G0V0G0P0o191b0!1`0z0z0n0r2w1r2d0X1z0l1^2I1=1@1?1X0d2f0;1S0X282t1W1H1J0,1%2S0o2U0X0G2Y1W0V2B1z2G2I2:0|1}1b2!242)0z100c0_0f2F2@0`2?2e2_1(2{2}0_0N311~332G2R01380x2~040u3c2H0{3f360;3i3k0g3n3e2@3g3t0_0v3w1C2.1r2Y2L0d1@2Q3r010r2*2l0Z1I1z2-0n2/323D3O0!3W351L1(0j0_0!0I3w0C342^3%3s0I0_0r2B0n0s1!1.2B0s2)0q0p2B3D3q3;010^040U0T3-3/3g480t3w060C4j3.452#3h0_3|1=3`40420n4c4m240G0_0E4w3y3M480h0A4h4k4l4D463)040I0G0z4C3$4n0X0_0o4S3:4n0G0m4W0X4Y3z0p0_0z1~0M4v1s3X4x1(480U444L4n0q0o3a0O4`4T24480T4g4;3d4i4J4k4d3M4V044q3~4t43572H5c46480H514Z2`4+040r0S4R5k3#5r4@0_4_5y5m4U4W4)3M4z040B5I464}0_0F0D5q4e0_0T0i5N4!4A5Y2`5H5y594j5F244N2B0K0W0z4(5y4K52374p0#4r3 0G415j2:0{0l3Z3V3E650l3H1r0K3J6a2O2J0x1Z673H1x5z3g2B0q0s0I0x0j3`0S0u0_1j1l1n1p0C562=1E331y0a0C0R1b0V0n180C0x0W0/0o0+0z0k0n0z0C1!0C1H2D0o1a290o2B0C281`1f6U0S282u1a6B1C332Y3g1*1R1T1V6l3M2h282a0_2n0Q3^0@0K2o0e1^1a3D3U5z2;3X64714M3*0n3,5?5+373?5u3_3{5{5h5~4u5T4E5C554I5b4?0;5-0#5:5=2:5@5A0;4F7C460X5t5v5x2=7I475C7T5G044X7r7!5K5M7+4{245P045R7%535V6C327P3z5%7O7s7J0_4P7Y7|814o7)5#1(4#4%8a3s5t4-0X4/7^5B498k0;7=0N505E7!544H5(1r7l662I6j3G0#0%0)04.
Chiffrement de Vigenère
Compléter le script suivant :
.1280130ldy1,4-]k/weibmc_:35qaPr%+ 7=9o[fgt28;6sSh)(punxv050d0n0K0x0o0c0P0C0r0c0x0P0P0E010K0o0U010406050P0V0q0q0x0z0e040Q0G0c0V0?0G0W050l0}0 11130{0U04051j1c1m0l1j0{0d0o0Y0+0-0/0;0R0o0J0R0c1A0R0K0_050$0p0c0n1v0.0:011z1B1D1B0K1J1L1H0K0z1k0K0R0+160P0U0x0W0;0L011N1x010I0(0n0W0x0q0n1H1*1,1;1P1@1L1`1|0_0a0C0y0z0G0U0G0P0o190W0C0!1(0z0z0n0r2h1c1 0W1k0l1$2u1Z1#1!1I0d210;1D0W1_2e1H1s1u0,1O2E0o2G0W0G2K1H0U2n1k2s2u2Y0|1+2i2M1=2R0z100c0_0C0f2r2$0`2#202(1P2*2,2.0L2;1,2?2s2D012{0x2-040C0u2 2t0{322_0;35370C0h3b312$333h2.0v3l3d3n3f340G2+362.0O3s2@2%1w2`3x2|380D3C3e3F3g3H3z380M3L3u3N3w3y3i0F3T2^3V3p040f0b3!3E2N3W3I0f2:1d2=1n2W1c2K2x0d1#2C3v0r2S1}1k3`1l3^2!3=3005400!2X3U3-0k0_0!0I3l0C3D3o0I0_0r1z0I0I2n0s0Y1A1_0n2n3l4m3v0^040T4B3M3-0W0_0K0n0X4M4H4e1=4E0t4k4C3$0p0_0P1Z4Q3#3-4E0g4V4I2)4p1L4j482t4W4(0_4U4;384?2)4Y044!0z4+4R1P4E0S524%1=0G0_0i020J0K0N573,4}4Z4#4`4l4,544^3s0C5s5n533g4L4N4M0s4q0o4s4A5m4|1P5a040E5h330P1/04020w0V0G5f5Q5S5f5r5t5G0;4g040I3x5L3v4K040o5*3V0G0m0_2P5/4J4~0z1,0J0n4$5i5p4F5 3o4~24634D0_4G4`5!345x4O5~6b5o0;55565F6i014T5Y5t5Z6n5,1L1V5E2Y5u585H0_5K6m5v6d044M6f673V4E0H6K4J5?6O4S0_0j6q6r6z605w5-0W1s0r0n5A4/5^596C6+2`6Q6E6A0;5I0A6.3g651_6R616a2!6t4.0n4:706F556V6r6c6u0#1Z6(0!0r360x5}6_015I6D6y7a72743?6n6M6}6Z2P6$6(0,737v6o6T786s6F5,7f7h7j6;6Y7l6-7M3o0_6v7d0s2R0q0p6x7s760_6N6h7H7S7c4u7J0-7L756=7D046U4`066W7G7;5,7W7Y6g7o6n7m7k4E6 7!7|7*6w6(7~7Z497t7$7C7b8a7C4E7@816F5I0B7k7I2o7K80877N777Q3v6@7k0q0o0_0L3B7^7`5s7p047T4u5B5D0n8v306X33838z3$0_8c6(8N8S4=8f047%7:7N7}0G7X8d8(7#7?7F8K716H5y7z4r4t8%4{827P8n888{6f5A8~8;388U8A0_8q8X6P8M7+8}5C8 907_7{7N5$2n0K0V0z1b9g4-965z8P8 3C0l4b0n2u2V9G3_1t3{2x2A2v0x1K9J0l3`0{9T0#0%0)04.
# Tests
(insensible à la casse)(Ctrl+I)
(Ctrl+Clic pour inverser les colonnes)