Recherche de site Web

Chiffrement par Système Affine en utilisant Python


Table des matières :

  1. Introduction
  2. Connaissances prérequises
  3. Équation de chiffrement affine
  4. Chiffrement par Système Affine en utilisant Python
  5. Preuve de concept
  6. Conclusion
  7. Questions Fréquemment Posées (FAQ)

Le chiffre affine représente un type spécifique de chiffre de substitution, appartenant à la catégorie des chiffres monoalphabétiques. Contrairement au célèbre chiffre de César, qui décale chaque lettre en texte clair d'un nombre fixe de trois positions, le chiffre affine utilise deux clés (a et b). Le choix des clés doit nécessiter une attention particulière.

Connaissances prérequises

Pour bien comprendre le sujet d'aujourd'hui, vous devez comprendre les concepts suivants :

  • Le Plus Grand Commun Diviseur (PGCD) et les nombres premiers entre eux
  • Arithmétique modulaire

Ces concepts sont expliqués en détail dans l'article précédent intitulé « Approche mathématique du chiffre affine ».

Équation du chiffre affine

Commençons par la formule pour le chiffrement affine :

E(x) = (a.x + b) mod m
E(x)
Désigne un chiffrement de l'index alphabétique x
a
Une valeur d'index de la première clé “spéciale”
x
Une valeur d'index de la lettre simple
b
Une valeur d'index de la deuxième clé (valeur de décalage supplémentaire)
mod m
Les opérations de modulo du montant total de l'alphabet qui est 26

Image alternative & légende: Équation du chiffre d'Affine

Par exemple, nous voulons chiffrer le texte clair « BIMANDO » avec les clés 7 et 13. En utilisant l'index de table suivant, nous convertissons d'abord le texte clair en son numéro correspondant :

Image alternative & légende: Numérotation des index

Le texte en clair « BIMANDO » est converti en un numéro d'index « 1 8 12 0 13 3 14 ».

Image alternative & légende: Convertir un texte brut en une valeur d'indexation

Ensuite, nous appliquons le calcul de l'équation, et le résultat est le suivant :

Image alternative & légende: Chiffrement affine

Ainsi, le texte en clair “BIMANDO” est chiffré en utilisant le chiffrement Affine avec les clés 7 et 13, ce qui donne “URTNAIH”.

Chiffrement par Système Affine en utilisant Python

Maintenant, disons que nous voulons envoyer un message confidentiel contenant plusieurs paragraphes. Faire le chiffrement par le chiffrement affine avec le processus manuel demande beaucoup d'efforts et de temps, et il y a un grand risque de mauvaise calcul, n'est-ce pas ? Par conséquent, nous avons besoin d'un programme qui automatise le processus de chiffrement affine. Voici le processus étape par étape pour créer un programme Python :

1. Importez les bibliothèques requises
Notre programme commence par importer les modules nécessaires tels qu'argparse, string et os pour l'analyse des arguments en ligne de commande, les opérations sur les chaînes et la fonctionnalité liée au système d'exploitation, respectivement.

import argparse
import string
import os

2. Définir le mappage de l'alphabet
Ensuite, nous définissons l'alphabet comme une chaîne de lettres minuscules en anglais. Cela est utilisé pour mapper les caractères lors du processus de cryptage plus tard.

alphabet = string.ascii_lowercase

3. Fonction de chiffrement par affine
C'est la fonction principale de notre programme. Elle prend le texte d'entrée et deux clés, “a ” et “b ”, et applique le chiffrement par affine au texte, en préservant la structure du texte.

def affine_cipher_encryption(text, a, b):

    encrypted_text = ""     for char in text:

        if char.lower() in alphabet:

            if char.isupper():

                encrypted_text += chr(((a * (ord(char.lower()) - 97) + b) % 26) + 65)             else:

                encrypted_text += chr(((a * (ord(char) - 97) + b) % 26) + 97)         else:

4. Vérification de la condition principale
Dans ce bloc de code, vérifiez s'il est exécuté en tant que programme principal. Il prépare l'analyseur d'arguments avec des descriptions pour le script et ses arguments. L'argument requis est uniquement un chemin d'accès à un fichier texte d'entrée. Lorsque nous ne spécifions pas le chemin de sortie, nous voulons qu'il définisse un par défaut au nom du fichier d'entrée avec « _encrypted » ajouté. Pour l'argument « keys », nous voulons qu'il soit formaté en « a,b ». Mais si nous le définissons, la valeur par défaut est 5 et 8.

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description="Affine Cipher Encryption from a text file")     parser.add_argument("input_file", help="Path to the input text file")     parser.add_argument("-k", "--keys", type=str, default="5,8", help="Keys for the Affine Cipher in the format 'a,b'")     args = parser.parse_args()     a, b = map(int, args.keys.split(','))     with open(args.input_file, "r") as file:

        text = file.read()     # Extract the file name from the input file path     input_filename, extension = os.path.splitext(args.input_file)     default_output_file = input_filename + "_encrypted" + extension     # Encrypt the text using the affine cipher     encrypted_text = affine_cipher_encryption(text, a, b)     # Write the encrypted text to a new file     with open(default_output_file, "w") as file:

        file.write(encrypted_text)

Enfin, une fois la fonction de cryptage terminée, notre programme enregistrera la sortie avec la même extension de fichier que le fichier d'entrée.

Maintenant, enregistrez-le sous « affine_cipher.py ». Maintenant, exécutez le programme en tapant la commande suivante :

python affine_cipher.py -h

Si vous ne trouvez pas d'erreur, la sortie ressemble à l'image suivante :

Image alternative & légende: Programme Python pour le chiffre affine

Preuve de concept

Nous avons un message confidentiel avec le nom suivant « message.txt », et nous souhaitons le diffuser à nos membres :

Image alternative & légende: Texte brut

Ainsi, nous utilisons le programme que nous avons créé avant de vouloir crypter ce message en utilisant le chiffre d'Affine avec les clés 3 et 7. La commande est la suivante :

python affine_cipher.py message.txt -k 3,7

Image alternative & légende: Programme Python pour le chiffre d'Affine

Avec la vitesse d'un clin d'œil, le message crypté est créé et enregistré avec succès dans « message_encrypted.txt ». Vérifions à quoi ressemble le message :

Image alternative & légende: Texte chiffré d'Affine

Comme vous pouvez le voir, le message est brouillé. Seuls nos membres qui connaissent la méthode de chiffrement et ses clés sont capables de déchiffrer le message.

Essayez-le vous-même

Téléchargez le code source de ce programme sur notre page GitHub à l'adresse https://github.com/bimando/Affine-Cipher.

Conclusion

En conclusion, la méthode de chiffrement du chiffre affine, une forme de chiffre de substitution monoalphabétique, offre une sécurité renforcée grâce à l'utilisation de deux clés, nécessitant une attention particulière lors de la sélection des clés. Comprendre des concepts comme le Plus Grand Commun Diviseur (PGCD), les nombres co-premiers et l'arithmétique modulaire est essentiel pour saisir les complexités du chiffre affine.

L'équation du chiffrement affine, E(x)=(a.x + b) mod m, sert d'outil fondamental pour le chiffrement où « a » et « b » représentent les clés et « x » symbolise l'index de la lettre en clair. La mise en œuvre d'un programme Python automatisé pour le processus de chiffrement affine a été démontrée pour rationaliser efficacement les tâches de chiffrement à grande échelle. Le programme intègre les fonctionnalités clés, y compris l'importation de bibliothèques, la cartographie de l'alphabet, une fonction de chiffrement, et l'analyse des arguments de la ligne de commande pour les chemins d'entrée et de sortie. Notamment, le script permet les paramètres par défaut pour les clés et les noms de fichiers de sortie afin de faciliter un processus de chiffrement sans accroc.

Questions Fréquemment Posées (FAQ)

Q1 : Qu'est-ce que le chiffre affiné et en quoi diffère-t-il du chiffre de César ?

A1 : Le chiffre affine est un type de chiffre de substitution monoalphabétique qui utilise deux clés, « a » et « b », pour le chiffrement. En revanche, le chiffre de César utilise un décalage fixe de trois positions pour chaque lettre dans le texte en clair.

Q2. Quelles sont les exigences préalables pour comprendre le chiffre affine ?

A2 : Pour comprendre en profondeur le chiffre affine, il est crucial de maîtriser des concepts tels que le Plus Grand Commun Diviseur (PGCD), les nombres coprimes et l'arithmétique modulaire.

Q3 : Comment puis-je chiffrer un message en utilisant le chiffre affine en Python ?

A3 : Pour automatiser le processus de chiffrement du cipher affine, vous pouvez utiliser le programme Python décrit dans l'article. Le programme chiffre efficacement de grands volumes de texte, simplifiant ainsi la procédure de chiffrement. L'article fournit des instructions étape par étape sur l'importation des bibliothèques, la définition de la cartographie de l'alphabet, la création de la fonction de chiffrement et l'analyse des arguments de la ligne de commande pour les chemins d'entrée et de sortie.