Implémentation du chiffrement par permutation de colonnes en Python

PythonBeginner
Pratiquer maintenant

Introduction

Dans ce projet, vous allez apprendre à implémenter l'algorithme de chiffrement par permutation de colonnes en Python. Le chiffrement par permutation de colonnes est une méthode de chiffrement du texte clair consistant à réarranger les colonnes d'une matrice formée à partir du texte d'entrée, sur la base d'un mot clé.

👀 Aperçu

## Exemple 1
texte = "welcometolq"; texte_chiffre = "ct,emlwooleq"
## Exemple 2
texte = "welcometolq "; texte_chiffre = "ct emlwooleq"
## Exemple 3
texte = "w"; texte_chiffre = ",,w,"
## Exemple 4
texte = None; texte_chiffre = None

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Le concept de base du chiffrement par permutation de colonnes
  • Comment implémenter l'algorithme de chiffrement par permutation de colonnes en Python
  • Comment tester l'algorithme de chiffrement avec des entrées d'échantillonnage

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Comprendre les principes du chiffrement par permutation de colonnes
  • Implémenter l'algorithme de chiffrement par permutation de colonnes en Python
  • Chiffrer et déchiffrer du texte à l'aide de la méthode de chiffrement par permutation de colonnes

Comprendre le chiffrement par permutation de colonnes

Dans cette étape, vous allez apprendre le concept de base du chiffrement par permutation de colonnes et comment il fonctionne.

Le chiffrement par permutation de colonnes est une méthode de chiffrement du texte clair consistant à l'écrire ligne par ligne avec un nombre fixe de caractères par ligne (le nombre de lettres uniques dans la clé, qui est généralement un mot sans lettres répétées). Si le nombre de caractères dans la dernière ligne est inférieur au nombre fixe de caractères par ligne, des symboles spéciaux sont utilisés pour compléter la ligne, formant une matrice. Ensuite, les colonnes de la matrice sont réarrangées selon l'ordre alphabétique des lettres de la clé. Enfin, les colonnes réarrangées sont lues une par une, donnant le texte chiffré.

Par exemple, considérons le texte clair, la clé et le caractère de complémentation suivants :

Texte clair : welcometolq

Clé : qiao

Caractère de complémentation : ,

  1. La longueur de la clé qiao est 4. La clé est ensuite attribuée des numéros selon l'ordre alphabétique des 26 lettres anglaises, les numéros les plus bas étant attribués aux lettres qui apparaissent plus tôt dans l'ordre. Les numéros attribués à qiao sont 4-2-1-3.
  2. Le texte clair est divisé en lignes, chaque ligne étant composée de 4 (la longueur de la clé) lettres, donnant 4 colonnes :
1 2 3 4
w e l c
o m e t
o l q ,
  1. Comme la dernière ligne manque d'une lettre, le caractère de complémentation est utilisé pour la remplir.
  2. L'ordre des colonnes dans la matrice est réarrangé selon l'ordre alphabétique de la clé :
4 2 1 3
c e w l
t m o e
, l o q
  1. Le contenu est ensuite lu une colonne à la fois, donnant le texte chiffré : ct,emlwooleq.

Implémenter le chiffrement par permutation de colonnes

Dans cette étape, vous allez implémenter l'algorithme de chiffrement par permutation de colonnes en Python.

Ouvrez le fichier column_permutation.py et localisez la fonction column_permutation_encryption(text). Cette fonction prend un texte en entrée, utilise la clé qiao et le caractère de complémentation , (virgule) pour effectuer un chiffrement par permutation de colonnes sur le contenu, et renvoie le texte chiffré.

Voici le code que vous devez implémenter :

def column_permutation_encryption(text: str) -> str:
    if not text:
        return None

    key = "qiao"
    padding_char = ","
    key_order = []
    sorted_key = sorted(key)
    for i in range(0, len(key)):
        key_order.append(sorted_key.index(key[i]))
    padded_text = text.ljust(len(key) * ((len(text) - 1) // len(key) + 1), padding_char)
    matrix = [
        padded_text[i : i + len(key)] for i in range(0, len(padded_text), len(key))
    ]
    encrypted_matrix = [[row[i] for i in key_order] for row in matrix]

    encryption_text: str = "".join(
        ["".join(column) for column in zip(*encrypted_matrix)]
    )
    return encryption_text

Passons en revue le code étape par étape :

  1. Tout d'abord, nous vérifions si l'entrée text est vide. Si c'est le cas, nous renvoyons None.
  2. Nous définissons la clé comme étant "qiao" et le padding_char comme étant ",".
  3. Nous créons une liste key_order pour stocker l'ordre alphabétique des lettres de la clé. Nous le faisons en triant d'abord la clé puis en trouvant l'index de chaque lettre dans la clé triée.
  4. Nous complétons l'entrée text avec le padding_char pour vous assurer que la longueur du texte est un multiple de la longueur de la clé.
  5. Nous créons une matrice à partir du texte complété, où chaque ligne représente une ligne du texte et chaque colonne représente un caractère dans la ligne.
  6. Nous réarrangeons les colonnes de la matrice selon l'ordre key_order que nous avons calculé précédemment.
  7. Enfin, nous lisons les colonnes réarrangées une par une et les concaténons pour former le texte chiffré.

Tester le chiffrement par permutation de colonnes

Maintenant que vous avez implémenté l'algorithme de chiffrement par permutation de colonnes, testons-le avec quelques entrées d'échantillonnage.

Ajoutez le code suivant à la fin du fichier column_permutation.py :

if __name__ == "__main__":
    txt = input()
    print(column_permutation_encryption(txt))

Ce code invitera l'utilisateur à entrer un texte, puis appelera la fonction column_permutation_encryption() avec le texte d'entrée et affichera le texte chiffré résultant.

Enregistrez le fichier et exécutez la commande suivante dans le terminal :

python3 column_permutation.py

Entrez quelques textes d'échantillonnage et observez les textes chiffrés résultants. Vous pouvez utiliser les exemples fournis dans le défi original comme référence :

## Exemple 1
texte = "welcometolq"
texte_chiffre = "ct,emlwooleq"
## Exemple 2
texte = "welcometolq "
texte_chiffre = "ct emlwooleq"
## Exemple 3
texte = "w"
texte_chiffre = ",,w,"
## Exemple 4
texte = None
texte_chiffre = None

Félicitations! Vous avez réussi à implémenter l'algorithme de chiffrement par permutation de colonnes en Python.

Résumé

Félicitations! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.

✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer