Algorithme de cryptage de Blaise de Vigénère.


Le français Blaise de Vigénère a inventé un système poly-alphabétique de cryptage qu'il décrivit en 1587 dans son ‘Traité des Chiffres’. Il utilise un tableau dans lequel sont affichés autant d’alphabets qu'il n'y a de lettres et crypte le texte à l’aide d’une clé. Voyons un exemple:
Texte clair: informatique
Clé: inraci
Cryptogramme: qawotuigzqwm
car ‘q’ est la lettre qui se trouve à l’intersection du ‘i’ horizontal du mot clair et du ‘i’ vertical du mot inraci.

 

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

A

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

B

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

A

C

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

D

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

E

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

F

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

G

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

H

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

I

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

J

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

K

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

L

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

M

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

N

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

O

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

P

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

Q

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

R

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

S

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

T

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

U

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

V

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

W

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

X

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

Y

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Z

Z

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



L'algorithme ci-dessous ne passe pas par la constitution d'un tableau mais par le décalage que chaque ligne subit par rapport au début de l'alphabet.
fonction Code(S, Clef)
  paramètre S, Clef: chaîne
  à valeur: chaîne
entier: i, j, k, n, Lclef, L, LClef
chaîne: Lettres, S2
LClef ß |Clef|
Lettres ß "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
L ß |Lettres|
S2 ß ""
pour i de 1 à |S| faire
  j ß 1+(i-1) mod LClef
  k ß Pos(Clefj,Lettres)
  n ß Pos(Si,Lettres)
  S2 ß S2//Lettres1+(n+k-1) mod L
fpour
résultat(S2)

fonction Decode(S, Clef)
  paramètre S, Clef: chaîne
  à valeur: chaîne
entier: i, j, k, n, Lclef, L, LClef
chaîne: Lettres, S2
LClef ß |Clef|
Lettres ß "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
L ß |Lettres|
S2 ß ""
pour i de 1 à |S| faire
  j ß 1+(i-1) mod LClef
  k ß Pos(Clefj,Lettres)
  n ß Pos(Si,Lettres)
  S2 ß S2//Lettres1+(n-k-1) mod L
fpour
résultat(S2)

fichier de chaîne: FIn, FOut chaîne S, Clef Clef ß "INRACI" FIn ß "DATA.DAT" ouvrir FIn FOut ß "CODED.DAT" ouvrir FOut lire S sur Fin tant que NOT EOF(FIn) faire écrire Code(S) sur FOut lire S sur FIn ftant fermer FIn, FOut


Charger une version Delphi de cet algorithme en cliquant ici
Page d'accueil.