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_lettredont voici un extrait :
nombre_lettre = {0: 'a', 1: 'b', 2: 'c', 3: 'd', etc...}
.128522.128013vt4=wf2pmuP(:517cSsr]{ék[63;0 dg)}/+n9qiyelRhb_oaO-050G0R0d0Y0P0S0u0F0s0S0Y0u0u0f010d0P0j010406050u0l0k0k0Y0v0Q040t0X0S0l0^0X0M0F020Y0k0j0D0F0T0R120v0O0l0R0u050K0 1113150}0j04051A1t1D0K1A0}0G0P0c0-0/0;0?0/0M0H0l0Y0H0R0!0j0Q0d0U1c0F0U0P0H0U0S1)0U0d0{050(0V0S0R1M0:0=011(1*1,1*0d1=1@1:0d0v1B1!0-180u0j0Y0M0?0i011_1O010h0*0R0M1g0R1:2b2d2i1{2l1@2o0k2q040b0F0m0v0X0j0X0u0P1b1d0$290v0v0R0s2L1t2s0M1B0K1!2X2527261;0G2u1P0P0M2n2I1:1J1L0.1`2+2-0M0X2;1:0j2Q1B2V2X310~2c1d2?2j2`0v120S1:0Y1%2Q0h0?030W0W0s2{0R1,2_0X0!0E0!0q0{0q1t0Y32350|342t371{393b3d3f0R3h013j3l3n3p2.3s0!2g040i3y3A2d3C2V2*013H0Y3c1B3e0U3g3i3k3m0$3R2`3T0C0{0C3Y2U3B0}3$3F0?3)3+053-3/3N3;3Q2,3S3t0e0{0e3}1u3 3D361N3G0X3a3*3J3.3L3:3P3?4c3^3t0p0{0p4i331G2 1t2;2!0G272)42013=2A0#1K1B2~0R303B3~3!054Q4X2t0P0G0?3k2V3T3v3,0F4)4+4w3o4y3r3t3v0F2y0R4?4Q3@4`3u1:0K3z4l3%0z0{0$0h4Z2W584O0g0{0F5e4%4m2@3(0h0{0s2Q0R0W2`0k0V2Q0W1@212Q5l5g4n0?0`040n0I0o5l0}4j4!3$4=014,353T3V464;4*5T4@525W2h4~504b3q5(2X3z0F5;5k415G3(5b0P3m5l5?353%0X0{0f5}5F5o5I0x0J5N5E5R5!5U2d3_3J5S4a4x5-3t3`4}2p5+6k4d0!3`5/045=5~3E5^5a040h4p645@5o0M0{0P6F5 4O0X5i042,6L6z6H0V0{0v2d1V6b6M5^5I0n6!6T2j0k0P0{0i0B6)5n2j5I5L6a5P5f6c4?4-4e6h6d5$4_3T4f6o2z6q4^6l0!4f6v6x6x65385`5|6`5m3%5I0A6;3%6I6Q7p4O5I0w7t5^6104637k6y6=3G6V040s3.7x660{6(7k7g1{6,0{0N0r6S7E0?7z0L7V7q6J7K6?0{0I6_336|5#6~0!4B4:6i727a4B764 5#51734A555:5=7P0?6B2Q0d0l0v0M7!4O7r1J7j315O4F4$1E4H0K4J1t0d4L8o2%2Y0Y1?4W4I4T1z7l4O2Q0k0W0h0Y0z5u0U6u1l1n1p1r0F5M7O1G3C1A0a0F0Z1d0j0R1a0F0Y0l0;0P0-0v0y0R0v0F1@0F8e2L2o0P2Q0F2n291h8,0U2n2J1$8Q1H4S2=5^1Q1S1U1W1Y1!1$1}1+1-1/8A5^2w2n2p0{0m1Z1#8a7O4V5m3Z5f8j7-6e0M3u547=717}5-0q547`785%9J4|4t3M3O9H3S9O809k5o6B5c7%1{6P5k7O6G385q7H5t5v0X5x5z5B250R9#5H7M6^7k8h4Y9A0W4-9J5X3e7?9T3^a35)6p7|5,9U3U2h9Q4va73ra97d829*1{850%889t317D7m0{0x9_5_7s9)6#7L048Qau833(7G7I0vaz6%az7R047T8b7y0{7Z7CaI7r6KaC6*1{6@aT9Y0{6DaMaXao437$a.aD2j6O6Jat3Bav8c7G6X1R9^a#7W01aOb23%aQ6/aN7)699}5E0K8j4G8w8m8y4I0%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...}
.128522.128013vt4=wf2pmuP(:517cSsr]{ék[63; dg)}/+n9qiyelRhb_oaO-050F0Q0d0X0O0R0u0E0s0R0X0u0u0f010d0O0j010406050u0l0k0k0X0v0P040t0W0R0l0@0W0L0E020X0k0j0D0E0S0Q110v0N0l0Q0u050J0~1012140|0j04051z1s1C0J1z0|0F0O0c0,0.0:0=0.0L0G0l0X0G0Q0Z0j0P0d0T1b0E0T0O0G0T0R1(0T0d0`050%0U0R0Q1L0/0;011%1)1+1)0d1;1?1/0d0v1A1Z0,170u0j0X0L0=0i011^1N010h0)0Q0L1f0Q1/2a2c2h1`2k1?2n0k2p040b0E0m0v0W0j0W0u0O1a1c0#280v0v0Q0s2K1s2r0L1A0J1Z2W2426251:0F2t1O0O0L2m2H1/1I1K0-1_2*2,0L0W2:1/0j2P1A2U2W300}2b1c2=2i2_0v110R1/0X1$2P0h0=030V0V0s2`0Q1+2^0W0Z0i0Z0q0`0q1s0X31340{332s361`383a3c3e0Q3g013i3k3m3o2-3r3r0`0i3x3z2c3B2U2)013G0X3b1A3d0T3f3h3j3l0#3Q2_3S0C0`0C3W2T3A0|3!3E0=3%3)053+3-3M3/3P2+3R3s0e0`0e3{1t3}3C351M3F0W393(3I3,3K3.3O3;4a3?3s0p0`0p4g321F2~1s2:2Z0F262(40013:2z0!1J1A2}0Q2 3A3|3Y054O4V2s0O0F0=3j2U3S3u3*0E4%4)4u3n4w3q3s3u0E2x0Q4;4O3=4^3t1/0J3y4j3#0z0`0#0h4X2V564M0g0`0E5c4#4k2?3$0h0`0s2P0Q0V1?202P0V2_0k0U2P5j5e4l0=0_040n0H5j5i3 5E015G0o5j0|4h4Y3!4:014*343S2f4.5W484v3p5!2g4|4~495*3s5#3W0E5@5L343#0L590O3l5K5D5m0W0`0f605M5m5G0x0I5R5C5V4(5X0V4+3s3^5$6f5(4?5:0Z3^4{2o5.5)4b6q533y5^5_3D5N58040h4n665`4M5|040O6I6C625g6M0L6O5l370U0`0v2c1U6d6J5N5G0n6$6P2i0k0O3U0B6+6V1`5G0H5Q5T2V5S326e4;6i0Z4d6l6u6o6w4d6s2y75503S735?6A5^61375}5 6{5k3#5G0A6=5{6X040s3,7r4M6)7x5N6L6N7m6B6?0=63040K6U3#6.0`0M0r7A680`0H0w7L4M7I657E7i3F0`7D306}4W6 6g714z746g4 4@3S4z794}7;5/6w7/7f5@7#0=6E2P0d0l0v6T7!677j041I7l7)5C0J4!1D4F0J4H1s0d4J8n2$2X0X1=4U4G4R1y7n4M2P0k0V0h0X0z5s0T6k1k1m1o1q0E6`4D1G1B040a0E0Y1c0j0Q190E0X0l0:0O0,0v0y0Q0v0E1?0E8d2K2n0O2P0E2m281g8+0T2m2I1#6`8R2:3#1P1R1T1V1X1Z1#1|1*1,1.8z5N2v2m2o0`0m1Y1!88324T5k3X5d8i7,5Y2c6q527:6n7c0C527_7b7?9G4`4r3L3N7=5*9L6y9i5m6E5a7R2i6R5i7m815n5p5r5t0$245s5y5A0Q9Y6@0`5I8P4i9$9y6h5Z9G5=3d5%4=9F3T9I7{6v3?9 2g9N4t9Q3Raa2W6z7h8a1`830$869r3A7F7o0`0x9=417t7v0vav5O9@aA7C7W5N7I7K896%5m7N047PaA6^9_3Yar6K7%aF9V0`6GazaJ6,7$6MaW2i0W6R2+a)3F7t6Z1Q9;9{aK2i7za@a$0=aM0i6;a{7GaB040H6b7m7*4Y8h3m2W9t8w0c3B8l0$0(0*04.
Chiffrement de Vigenère
Compléter le script suivant :
.128013vt4=8fw2pmuP(751:,cSsr]k[63;0 dg)/+n9qiyelh_boax%-050F0P0c0V0N0Q0v0E0t0Q0V0v0v0e010c0N0j010406050v0l0k0k0V0w0O040u0U0Q0l0?0U0K050I0}0 11130{0j04051j1c1m0I1j0{0F0N0b0+0-0/0;0-0K0G0l0V0G0P0Y0j0O0c0R1a0E0R0N0G0R0Q1O0R0c0_050$0T0Q0P1v0.0:011N1P1R1P0c1X1Z1V0c0w1k1J0+160v0j0V0K0;0i011#1x010g0(0P0K0V0k0P1V1`1|211%241Z27290_0a0E0m0w0U0j0U0v0N190K0E0!1^0w0w0P0t2u1c2c0K1k0I1J2H1;1?1=1W0F2e1y0N0K262r1V1s1u0,1$2R2T0K0U2X1V0j2A1k2F2H2.0|1{2v2Z222%0w100Q1V0V1M2A0g0;030S0S0t2(0P1R2$0U0Y0d0Y0q0_0E0q1c0V2/2=0`2;2d2@1%2_2{2}2 0P3101333537392U3c0Y1 040E0i3j3l1|3n2F2Q013s0V2|1k2~0R303234360!3C2%3E0B3g0B3K2E3m0{3O3q0;3R3T053V3X3y3Z3B2S3D3d0d3g0d3,1d3.3o2?1w3r0U2`3S3u3W3w3Y3A3#3~3%3d0p3g0p442.3/2=3P3?4e3`3z3!384k3b3d0A3g0A4q463:493=4b3t3U3v3x4y3}3a3E0o3g0o4H3M4s3p4K3Q4M4d4O4f4Q3|4j4T3d0f3g0f4Y2G4!482!4%4c3@3_4g3{4i4A4/0Y0L3g0L4@3N4t3;4|4N3^4P4h4z3$4C3e0D0_0q0D594_4u4(4~5g515i4B3E0q3f045A591n2,1c2X2K0F1?2P5c4z2W1t1k2+0P2-3m3-3M054z5U2d0N0F0;342F5z3u5$5(525j5+0E2i0P5.5x545B3,4J4{0y0_0!0g5W2G473P0h3g635!4`2^0g0_0t1N0g0g2A0S0b1O260P2A69655c0^040n6q5}2^0_0c0P0W6A6w5b4$6t0r690E6r4$0K0T0_0v1;6E4#4{6t0s6J6L4{0K6e1Z62455X6x1%6H6X6*3=6O046Q0w6-6F6U0_0H6@6T220U0_0Y020G0c0C6|6b3r6:6=763P6,6(4^6S2v5-015)2=3E3G5f7i4-533 3F205?5^4S7s7n0I3k0E7C6K6.3Q6z6B6A356g6i0P7b5c6 040e7O4$0v3G020M0l0U747X7Z74690{7e6a0E7p0S5*3d3)4O7.5_7s3)5=285@7j5/5y7;1V7A3H7D6Y225 040g4b7T6Z0_0N8c6~67042S8g780_0w1|1E7g7c0_6v7+868m042h8r6s8t8A6M7H6C7N8v7F6t0H6{7+7E6^227d4r8r7.7:3c5,5%7~7^4l8W7{297w4.7s412H7B7D8/8w3=0_1Z1-6p8N8;017Q7S8`7F6!046A8G8D6_040z956y8j996+0_0x7)8T8Y7k1|3E4n7?9i7 544n8%7}7q5:4m828.8/7C8{912S1s0t0P356$8l0;8}9J7G9b8 8P1%7Q0X9M6N8?269c0;6t8u2:906#3w9Y018K9g8I4t8U7l4D8X8)7r8#4E9s9@9v0Y4E8-849z8O6}3r9W8^9G0!0t3S1D8H2.a3779K0_8~ae9B9(6%9$9Q9Z0_989.a48=8j0K9E9G0,9)atag9+9e9-ao5#9o8V4V9n9|800Y4V9{8Z7x8#aL3Ka29A9%04a9ab8q9Pau8|ai9Ua61;9G2%0k0T8_aHaD6tasa@4ua-6ja#0-a%a{8B049f7+7*a{9:9k4:9?aS8*8#4;aR9uaO4;a0aXafa|04a:a=ad3mbn7Pa+a(a^8CaCbo8@a.0Sbqa?5V8Jar9*91bCbG6)apaEb49M7Q0Ja,a!2Ba$bsbOa)9,bx3P9S9M0k0N0_0i4Gb69h5.8V56aMbd9^5k56bh9p7sb@aWaXal8y0#bD6f0N6h2AbZ2Gbu4$9Lb%5c91bF9GbMcb7,b3a`bHbPci0Ua;bN64bIbRb:bAb90K5z5mb^bi5`5mb}8!5k5o9xa19zc3937Jc7c9cmcd4{cfakaZcRaz7Lcv848{bTbVcl7Kc87Mcmb7cqaIb=9;3e5{2~7@aTcL3fcJc~5z5{838:7F882A0c0l0w1bcg8E927Ic$c/c(c=5X0I5Z5F5T5H5Q1c0c5Kdt2N2I0V1Ydq0I5I7*0!0$0(0v04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)