Technologie

Comment coder et décoder des messages en utilisant Base64 et Python

Comment coder et décoder des messages en utilisant Base64 et Python

Le module Base64 de Python est un outil puissant pour coder et décoder les messages. Vous pouvez l’utiliser pour envoyer des données en toute sécurité sur Internet. Les sites Web, les applications et les services de communication utilisent couramment ce type d’encodage pour protéger les données sensibles des pirates informatiques.


Le module Base64 possède une paire de fonctions que vous pouvez utiliser pour coder et décoder les messages, ajoutant ainsi une sécurité supplémentaire à vos transferts de données.

Le module Tkinter et Base64

Tkinter vous permet de créer des applications de bureau. Il offre une variété de widgets comme des boutons, des étiquettes et des boîtes de texte qui facilitent le développement d’applications sans trop d’efforts. Vous pouvez créer des programmes GUI incroyables avec Tkinter. Vous pouvez construire une simple calculatrice, une application de liste de tâches ou un jeu de test de frappe. Pour installer Tkinter dans votre système, ouvrez votre terminal et tapez :

 pip install tkinter 

BASE64 fournit des fonctions pour encoder des données binaires en ASCII et les décoder en binaire. Il prend en charge l’encodage standard et l’encodage sécurisé des URL, ce qui rend la transmission des informations plus sûre. Pour convertir une chaîne en un caractère Base64, obtenez la valeur ASCII de chaque caractère et calculez son binaire sur 8 bits. Convertissez ce morceau de 6 bits en regroupant les chiffres et en les reconvertissant dans leurs valeurs décimales respectives. Enfin, utilisez la table d’encodage Base64 pour obtenir les valeurs Base64 de chaque décimal.

Comment coder et décoder des messages en Python ?

Vous pouvez trouver le code source de ce projet dans son dépôt GitHub.

Commencez par importer les deux modules. Initialiser l’instance Tkinter et afficher la fenêtre racine. Définissez le titre, les dimensions en pixels, et la couleur de fond de la fenêtre.

 from tkinter import *
import base64

root = Tk()
root.geometry('750x400')
root.configure(background='aqua')
root.title("Encode and Decode Messages Using Python")

Utilisez les widgets Label pour afficher des informations utiles sur l’application. L’étiquette accepte une fenêtre parent dans laquelle vous voulez la placer, le texte qu’elle doit afficher, ainsi que le style de police, la couleur et la couleur de fond. Utilisez pack() pour organiser le widget dans un bloc de mise en page avant de le placer dans le widget parent. StringVar facilite le contrôle de la valeur d’un widget comme une étiquette ou une entrée.

 Label(root, text='Python Message Encoder and Decoder', font='arial 25 bold', fg='white', bg="purple").pack()
Text = StringVar()
key = StringVar()
mode = StringVar()
Result = StringVar()

Définir une fonction Encoder() qui accepte une clé pour l’encodage et le décodage avec le message. Définir une liste vide et itérer jusqu’à la longueur du message. Définir l’index de la clé comme le modulus de l’opération et stocker sa valeur dans la variable key_c. Utilisez ord() pour obtenir la valeur Unicode du caractère et utiliser chr() pour obtenir le caractère qui représente la valeur spécifiée.

Ajouter cette valeur à la liste. Joignez chaque élément de la liste avec une chaîne vide et utilisez la fonction encode() pour renvoyer une version codée utf-8 de la chaîne. L’adresse base64.urlsafe_b64encode() encode cette entrée et remplace – par + et _ par /.

 def Encode(key, message):
    enc = []

    for i in range(len(message)):
        key_c = key[i % len(key)]
        enc.append(chr((ord(message[i]) + ord(key_c)) % 256))

    return base64.urlsafe_b64encode("".join(enc).encode()).decode()

Définir une fonction Décoder() qui accepte une clé pour le codage et le décodage avec le message. Définit une liste vide et décode le message. Itérer jusqu’à la longueur du message et définir le modulus de l’opération comme index et stocker sa valeur dans key_c. Ajouter le caractère de la chaîne Unicode décodée du message comme indiqué ci-dessous. Retourner la chaîne décodée.

 def Decode(key, message):
    dec = []
    message = base64.urlsafe_b64decode(message).decode()

    for i in range(len(message)):
        key_c = key[i % len(key)]
        dec.append(chr((256 + ord(message[i]) - ord(key_c)) % 256))

    return "".join(dec)

Définir une fonction Mode() qui récupère le mode saisi par l’utilisateur dans le widget Entry et appelle la fonction appropriée en fonction de la sélection. Si l’utilisateur n’entre pas une réponse valide, elle affiche un message d’erreur.

 def Mode():
    if (mode.get() == 'E'):
        Result.set(Encode(key.get(), Text.get()))
    elif (mode.get() == 'D'):
        Result.set(Decode(key.get(), Text.get()))
    else:
        Result.set('Invalid Mode')

Définir une fonction Exit() pour tuer et terminer l’interpréteur fonctionnant en arrière-plan. Définissez une fonction Reset() pour effacer le contenu de la zone d’entrée.

 def Exit():
    root.destroy()

def Reset():
    Text.set("")
    key.set("")
    mode.set("")
    Result.set("")

Définissez des widgets d’étiquette et d’entrée pour Message, Key, Mode et Text. Spécifiez la fenêtre parent dans laquelle vous souhaitez les placer, le style de police, le texte et la couleur de fond. Définissez également les coordonnées pour les organiser.

 Label(root, font='arial 17 bold', text='Message', fg='black', bg="aqua").place(x=60, y=100)
Entry(root, font='arial 15', textvariable=Text, bg='white').place(x=450, y=100)

Label(root, font='arial 17 bold', text='Key', fg='black', bg="aqua").place(x=60, y=130)
Entry(root, font='arial 15', textvariable=key, bg='white').place(x=450, y=130)

Label(root, font='arial 17 bold', text='Mode(E-Encode, D-Decode)', fg='black', bg="aqua").place(x=60, y=160)
Entry(root, font='arial 15', textvariable=mode, bg='white').place(x=450, y=160)

Label(root, font='arial 17 bold', text='Text', fg='black', bg="aqua").place(x=60, y=190)
Entry(root, font='arial 15 bold', textvariable=Result, bg='white').place(x=450, y=190)

De même, définissez trois boutons pour afficher le résultat, réinitialiser les champs et arrêter le programme. Les boutons ont un paramètre spécial appelé commande qui prend une fonction et l’exécute en cliquant dessus.

 Button(root, font='arial 15 bold', text='Result', padx=2, bg='Light Gray', command=Mode).place(x=100, y=240)
Button(root, font='arial 15 bold', text='Reset', width=6, command=Reset, bg='Green', padx=2).place(x=300, y=240)
Button(root, font='arial 15 bold', text='Stop', width=6, command=Exit, bg='Red', padx=2, pady=2).place(x=500, y=240)

Le site mainloop() indique à Python d’exécuter la boucle d’événements de Tkinter et d’écouter les événements (comme les pressions sur les boutons) jusqu’à ce que vous fermiez la fenêtre.

 root.mainloop() 

L’encodeur/décodeur de messages en action

En exécutant le programme, celui-ci affiche une fenêtre dans laquelle vous devez entrer un message, une clé et un mode. En sélectionnant le mode Encodage avec une clé de 2009, le message Faire usage de se transforme en f8KRwpvCnlLChcKjwp5Sf8KW.

Sortie du message Python Encode

De même, en copiant le message codé et en le collant à l’entrée pour le décoder avec la même méthode, vous obtenez le message original.

Sortie du message décodé par Python

Cybersécurité à l’aide de Python

Vous pouvez utiliser Python pour écrire des scripts qui automatisent les contrôles de sécurité, surveillent les réseaux et recherchent les vulnérabilités. Vous pouvez l’utiliser pour créer des applications robustes qui utilisent l’authentification pour réduire les risques qu’un attaquant compromette vos données.

Les experts en cybersécurité utilisent souvent Python pour construire des pare-feu d’applications Web afin de surveiller une application. Ils peuvent effectuer des analyses de détection des menaces en utilisant l’apprentissage automatique. Avec cette architecture, il est beaucoup plus facile de créer des tests de pénétration personnalisés et de valider les protocoles de sécurité.

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Lecture suivante
Chargement de l’article suivant…
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x