top of page
  • Arnaud

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

Après avoir vue la version simplifiée de notre script du code de César, voyons comment nous pouvons le rendre plus attrayant avec une GUI. Si vous ne l'avez pas encore lu, je vous conseille d'aller voir la partie 1 de l'article.


Notre GUI ressemblera à ceci, il permettra de taper son texte, choisir le décalage à appliquer, cliquer sur le bouton et découvrir son message en version crypté :


Bien entendu le but ici est essentiellement de voir ce que l'on peut faire avec l'ensemble de classes System.Windows.Forms, afin d'afficher une fenêtre pour simplement crypter et décrypter des messages.


Pour créer votre fenêtre GUI, je vous invite à utiliser l'excellent PoshGUI, qui n'est autre qu'un WYSIWYG gratuit et immédiatement disponible en ligne. Bien entendu cela ne vous aidera que pour la création de la partie graphique.



Script du code de César : Version cryptage GUI



Tout d'abord on charge les classes nécessaires pour notre script, System.Windows.Forms pour créer nos fenêtres, boutons, etc... Et System.Drawing, pour gérer la taille et l'emplacement de nos éléments:

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

On créé notre fenêtre de base sur laquelle on rajoutera, nos boutons, champ de texte, etc...

Je précise le titre de la fenêtre, sa taille et je désactive l'icône par défaut :

$Form = New-Object System.Windows.Forms.Form    
$Form.Size = New-Object System.Drawing.Size(600,270)  
$Form.Text = "Caesar Cipher Encryption"
$Form.ShowIcon = $False

On créé maintenant une fonction que l'on utilisera un peu plus loin dans le script :

function Encrypt {

On ajoute dans un premier temps deux variables qui seront entrées par l'utilisateur (On note que j'utilise les mêmes variables que dans la partie 1 de l'article, elles sont simplement récupérées à partir des champs que nous allons créer plus tard.) :

$i = $DropDownBox.SelectedItem.ToString() 
$text = $InputBox.Text

Puis on rajoute exactement la même transformation que dans la partie 1 de l'article, pour crypter notre message :

$asciis = [int[]][char[]]"$text"
$encrypt = foreach ($ascii in $asciis) {
$ascii + $i
}
$asciitotext = [char[]]$encrypt
$arraytostring = -join $asciitotext

Enfin pour terminer la fonction, on indique que notre résultat sera à afficher dans l'autre champ de texte:

$OutputBox.text=$arraytostring
}

Maintenant que notre fonction est créée nous allons voir la suite de la partie graphique.


On ajoute un premier texte explicatif, on précise sa position, sa taille, son contenu et on l'ajoute à la fenêtre :

$label1 = New-Object System.Windows.Forms.Label
$label1.Location = New-Object System.Drawing.Point(10,10)
$label1.Size = New-Object System.Drawing.Size(280,20)
$label1.Text = 'Enter the text to encrypt : '
$form.Controls.Add($label1)

On passe au premier champ texte qui nous permettra d'entrer le texte à crypter (on remarque que c'est ce champ texte qui définira la variable $text de notre fonction créée plus haut). On précise sa position, sa taille, on active le multiligne, la configuration de la barre de défilement et on l'ajoute à la fenêtre :

$InputBox = New-Object System.Windows.Forms.TextBox 
$InputBox.Location = New-Object System.Drawing.Size(10,35) 
$InputBox.Size = New-Object System.Drawing.Size(565,40) 
$InputBox.MultiLine = $True 
$InputBox.ScrollBars = "Vertical" 
$Form.Controls.Add($InputBox) 

On créé maintenant un menu déroulant, afin de pouvoir sélectionner le décalage à appliquer.

On précise sa position, sa taille, le texte à afficher, la taille du menu une fois déplié, et on l'ajoute à la fenêtre. C'est ce menu déroulant qui définira la variable $i de notre fonction créée plus haut :

$DropDownBox = New-Object System.Windows.Forms.ComboBox
$DropDownBox.Location = New-Object System.Drawing.Size(10,80) 
$DropDownBox.Size = New-Object System.Drawing.Size(180,20) 
$DropDownBox.text = "Select the Shift to apply"
$DropDownBox.DropDownHeight = 200 
$Form.Controls.Add($DropDownBox) 

Notre menu déroulant est créé, mais il est vide, nous allons donc ajouter des choix.

On créé un tableau avec les chiffres de 1 à 9 et à l'aide d'une boucle foreach on rempli notre menu déroulant :

$Numbers=@(1,2,3,4,5,6,7,8,9)
foreach ($Number in $Numbers) {
$DropDownBox.Items.Add($Number)
} 

Passons à la création du bouton, pour changer on définit sa position, sa taille et le texte du bouton. Puis on définit l'action au clic, on remarque que le clic sur ce bouton déclenchera la fonction que nous avons créé plus haut (Encrypt). Enfin on l'ajoute à notre fenêtre :

$Button = New-Object System.Windows.Forms.Button 
$Button.Location = New-Object System.Drawing.Size(400,80) 
$Button.Size = New-Object System.Drawing.Size(110,80) 
$Button.Text = "Encrypt" 
$Button.Add_Click({Encrypt}) 
$Form.Controls.Add($Button)

On rajoute un deuxième texte explicatif de la même manière que le premier :

$label2 = New-Object System.Windows.Forms.Label
$label2.Location = New-Object System.Drawing.Point(10,150)
$label2.Size = New-Object System.Drawing.Size(280,20)
$label2.Text = 'Your text encrypted : '
$form.Controls.Add($label2)

Nous arrivons au deuxième champ texte qui affichera notre message crypté, rien de très différent par rapport au premier, si ce n'est que son texte est définit dans la fonction créée plus haut, grâce à la variable $arraytostring :

$OutputBox = New-Object System.Windows.Forms.TextBox 
$OutputBox.Location = New-Object System.Drawing.Size(10,170) 
$OutputBox.Size = New-Object System.Drawing.Size(565,40) 
$OutputBox.MultiLine = $True
$OutputBox.ScrollBars = "Vertical" 
$Form.Controls.Add($OutputBox) 

Pour finir on affiche notre fenêtre :

$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()


Script du code de César : Version décryptage GUI


Notre fenêtre GUI de décryptage :


Voici l'autre version du script qui permet de décrypter le message, peu de changement à part sur le texte, le nom de certaines variables et le plus important une soustraction en lieu et place d'une addition :



Vidéo


Vous trouverez ci-dessous une démonstration des fenêtres GUI qui nous permettent de crypter et décrypter notre message de façon plus attrayante :



Et voilà vous êtes maintenant à la pointe de la cryptographie avec un léger décalage de 2000 ans.


bottom of page