Comment rediriger le résultat d’une commande console sur une form Un petit exemple pour vous montrer comment grâce à System.Management et System.ServiceProcess il est possible de lancer des commandes dans la console windows et de rediriger le résultat sur une form. Dans cet exemple …
Crypter avec une fonction affine
Le chiffrage affine utilise une fonction affine du type y = (ax + b) pour crypter des données; a et b sont des constantes que l’on nommera ici CleA et CleB et ou x et y sont des nombres correspondant aux lettres de l’alphabet en sachant que A=0, B=1, C=2…
On remarquera que si a=1, on se retrouve avec le chiffre de César et par conséquence « b » sera le décalage.
On remarquera également que si b=0 alors « a » sera toujours chiffré « A »
Les formules de chiffrement et de déchiffrement sont :
pour crypter : C=c(x)= (ax + b) mod 26 ‘on travaille avec un modulo 26 pour que la lettre chiffré soit un nombre entre 0 et 25
pour décrypter : D=d(x)=(a^-1 * (x – b)) mod 26
La fonction crypeaffine va chercher la position de la lettre à crypter dans l’alphabet,
applique la formule de cryptage et retourne la lettre cryptée
Fonction crypeaffine (Entrée lettre : chaine; Entrée CleA : entier; _ Entrée CleB : entier; Sortie crypteaffine : chaine) ENTIER X X :=posalph(lettre) X :=((CleA * X) + CleB ) Mod 26 crypteaffine := posnum(X) Fin fonction
posalpha est une fonction qui retourne la position de la lettre dans l’alphabet en commençant par A=0
Fonction Posalpha (Entrée lettre : chaine; Sortie Posalpha : entier) CHAINE alpha, tempo alpha := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" pour i allant de 0 à longueur(alpha) tempo=alpha[i] si lettre = tempo alors Posalpha=i sort de pour Fin de si prochain i fin fonction
posnum est une fonction qui retourne la lettre de l’alphabet par rapport à une postion donnée
Fonction Posnum (Entrée position : entier; Sortie Posnum : chaine) CHAINE alpha alpha := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Posnum=alpha[position] -1 // A=0 fin fonction
La fonction decrypeaffine va chercher la position de la lettre à décrypter dans l’alphabet,
applique la formule de décryptage et retourne la lettre décryptée
fonction decrypteaffine (Entrée lettre : chaine; _ Entrée CleA : entier; Entrée CleB : entier; Sortie decrypteaffine : chaine) ENTIER X InvA=InvA(CleA) X :=posalph(lettre) X :=(InvA * (x - CleB)) Mod 26 decrypteaffine := posnum(X) fin fonction
Cette fonction retourne l’inverse de CleA obligatoire pour pouvoir décrypter
fonction InvA (Entrée CleA : entier, Sortie InvA : entier pour i allant de 1 à 26 si (CleA * i ) mod 26 = 1 alors InvA=I sort de pour fin de si fin de pour fin fonction
Code visual basic 6
Dim alphab As String 'alphabet Dim tabsortie() As String 'contient la chaine de sortie Dim cleA, cleB As Integer 'les clé de cryptage pour la fonction Private Sub Form_Load() alphab = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" End Sub Private Sub btcrypte_Click() Dim chacrypter As String 'la chaine a crypter 'on sort de la procedure si l'user n'a pas choisi de clé ou de texte a crypter If T_a.Text = "" Or t_b.Text = "" Then MsgBox "Vous devez choisir les clés A et B de la fonction de cryptage", vbCritical, "erreur": Exit Sub If tcrypte.Text = "" Then MsgBox "Veuillez entrez un texte à crypter", vbCritical, "erreur": Exit Sub cleA = T_a.Text cleB = t_b.Text chacrypter = Replace(UCase(tcrypte.Text), " ", "") 'sans espace, en majuscule ReDim tabsortie(Len(chacrypter)) 'ETAPE////////////////////// 'on recupere lettre a lettre la chaine a crypter 'pour chaque lettre recuperé : Dim ltrcrypter As Integer Dim x As Integer 'position de la lettre For i = 0 To Len(chacrypter) - 1 'on cherche sa correspondance lettre/chiffre en sachant que A=0 x = (InStr(1, alphab, Mid(chacrypter, (i + 1), 1))) - 1 'on crypte avec la fonction (ax + b) mod 26 ltrcrypter = ((cleA * x) + cleB) ltrcrypter = modulo(ltrcrypter, 26) 'et on va chercher la lettre correspondante dans l'alphabet tabsortie(i) = Mid(alphab, (ltrcrypter + 1), 1) '+1 car A=0 Next i 'on affiche le resultat tdecrypte.Text = "" For i = 0 To Len(chacrypter) - 1 If i Mod 4 = 0 Then esp = " " Else esp = "" tdecrypte.Text = tdecrypte.Text & esp & tabsortie(i) Next i End Sub Private Sub btdecrypte_Click() 'on sort de la procedure si l'user n'a pas choisi de clé ou de texte a decrypter If T_a.Text = "" Or t_b.Text = "" Then MsgBox "Vous devez choisir les clés A et B de la fonction de cryptage", vbCritical, "erreur": Exit Sub If tdecrypte.Text = "" Then MsgBox "Veuillez entrez un texte à decrypter", vbCritical, "erreur": Exit Sub Dim chadecrypter As String chadecrypter = Replace(UCase(tdecrypte.Text), " ", "") 'sans espace, en majuscule ReDim tabsortie(Len(chadecrypter)) cleA = T_a.Text cleB = t_b.Text 'on cherche a^-1 'inverse de a 'soit quel est le chiffre qui multiplié par "a" mod 26 donne 1 Dim InvA As Integer InvA = 0 For i = 1 To 26 If (cleA * i) Mod 26 = 1 Then InvA = i Exit For End If Next i 'Etape decryptage//////////// Dim x As Integer 'position de la lettre Dim ltradecrypter As Integer 'on recupere lettre a lettre la chaine a decrypter 'pour chaque lettre recuperé : For i = 0 To Len(chadecrypter) - 1 'on cherche sa correspondance lettre/chiffre en sachant que A=0 x = (InStr(1, alphab, Mid(chadecrypter, (i + 1), 1)) - 1) '-1 car A=0 'on decrypte avec (a^-1 * (x - b))mod 26 ltradecrypter = (InvA * (x - cleB)) ltradecrypter = modulo(ltradecrypter, 26) 'et on va chercher la lettre correspondante dans l'alphabet tabsortie(i) = Mid(alphab, (ltradecrypter + 1), 1) Next i 'on affiche le resultat tcrypte.Text = "" For i = 0 To Len(chadecrypter) - 1 tcrypte.Text = tcrypte.Text & tabsortie(i) Next i End Sub 'la fonction modulo de vb retourne un nombre erroné sur un modulo negatif 'cette fonction permet un bon calcul du modulo Public Function modulo(x As Integer, k As Integer) As Integer Dim valeur As Integer valeur = x Mod k If (valeur < 0) Then modulo = valeur + k Else modulo = valeur End If End Function
You must be logged in to post a comment.