top of page
  • Arnaud

[PowerShell] Le code de César (1/2)

Utilisé par Jules César pour crypter ses messages, cette forme de cryptage antique utilise un décalage fixe des lettres.



Le code de César : Comment ça fonctionne?


Comme dit plus haut on opère un décalage fixe des lettres du texte à crypter.

Par exemple si l'on opère un décalage fixe de 3 sur les lettres ABCD, cela donne DEFG, A devient D, B devient E, etc...



Script du code de César : Version simple




Cryptage


Dans un premier temps, on définit le texte à crypter ainsi que le décalage à appliquer :

$text = "titi a cru voir un grosminet"
$i = 3

Pour simplifier le script et appliquer un décalage mathématique facilement nous allons utiliser les caractères ASCII.

On transforme donc notre texte en un tableau contenant la version ASCII de notre texte :

$asciis = [int[]][char[]]"$text"

Ce qui donne :

PS C:\Users\Arnaud> $asciis
116
105
116
105
32
97
32
99
114
117
32
118
111
105
114
32
117
110
32
103
114
111
115
109
105
110
101
116

On applique ensuite le décalage spécifié au début du script ($i = 3), et on utilise une boucle foreach pour modifier chacune des valeurs de notre tableau. On additionne tout simplement 3 à chaque nombres :

$encrypt = foreach ($ascii in $asciis) {
$ascii + $i
}

Ce qui donne :

PS C:\Users\Arnaud> $encrypt
119
108
119
108
35
100
35
102
117
120
35
121
114
108
117
35
120
113
35
106
117
114
118
112
108
113
104
119

On retransforme maintenant nos caractères ASCII en lettres :

$asciitotext = [char[]]$encrypt

Ce qui donne :

PS C:\Users\Arnaud> $asciitotext
w
l
w
l
#
d
#
f
u
x
#
y
r
l
u
#
x
q
#
j
u
r
v
p
l
q
h
w

Pour finir on retransforme notre tableau en string avec la fonction -join pour le rendre un peu plus lisible et on l'affiche :

$arraytostring = -join $asciitotext
$arraytostring

Ce qui donne :

PS C:\Users\Arnaud> $arraytostring
wlwl#d#fux#yrlu#xq#jurvplqhw

Notre texte initial "titi a cru voir un grosminet" est maintenant devenu "wlwl#d#fux#yrlu#xq#jurvplqhw".



Décryptage


Notre message secret étant de la plus haute importance voyons maintenant comment le déchiffrer. Si vous avez suivi, il suffit juste d'appliquer le décalage fixe de façon inversé, au lieu d'additionner 3, on soustrait 3.


Dans un premier temps on reprend notre texte crypté et on spécifie le décalage :

$text = "wlwl#d#fux#yrlu#xq#jurvplqhw"
$i = 3

A nouveau on transforme notre texte crypté en un tableau de caractère ASCII :

$asciis = [int[]][char[]]"$text"

Puis applique le décalage fixe ($i = 3) inverse (soustraction à la place de l'addition), toujours avec une boucle foreach :

$decrypt = foreach ($ascii in $asciis) {
$ascii - $i
}

Ensuite on retransforme nos caractères ASCII en texte :

$asciitotext = [char[]]$decrypt

Enfin on retransforme notre tableau en string avec la fonction -join pour le rendre un peu plus lisible et on l'affiche :

$arraytostring = -join $asciitotext
$arraytostring

Ce qui donne :

PS C:\Users\Arnaud> $arraytostring
titi a cru voir un grosminet

On retrouve bien notre texte initial.


Voici comment grâce à PowerShell on reproduit une méthode de cryptographie vieille de 2000ans.


bottom of page