Implémentation des Chiffrements Atbash et Morse en Python

  1. Chiffrement Atbash

Le chiffrement Atbash est un système de substitution simple qui inverse l’ordre des lettres de l’alphabet. Par exemple, le schéma suivant montre la correspondance :

  • ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • ZYXWVUTSRQPONMLKJIHGFEDCBA

Pour déchiffrer, on peut utiliser les codes ASCII : soustraire la valeur de la lettre actuelle de celle de ‘Z’ (ou ‘z’) et ajouter celle de ‘A’ (ou ‘a’). Cela permet de réaliser un algorithme réversible. Voici un exemple à décoder : wl blf pmld zgyzhs kzhhdliw.


def chiffrer_atbash(texte):
    res = ""
    for c in texte:
        if c.isalpha():
            if c.isupper():
                res += chr(ord('Z') - ord(c) + ord('A'))
            else:
                res += chr(ord('z') - ord(c) + ord('a'))
        else:
            res += c
    return res

def dechiffrer_atbash(texte):
    return chiffrer_atbash(texte)

while True:
    print("1. Chiffrer")
    print("2. Déchiffrer")
    print("3. Quitter")
    choix = input("Votre choix : ")
    if choix == "1":
        entree = input("Texte à chiffrer : ")
        print("Résultat : " + chiffrer_atbash(entree))
    elif choix == "2":
        entree = input("Texte à déchiffrer : ")
        print("Résultat : " + dechiffrer_atbash(entree))
    elif choix == "3":
        break
    else:
        print("Choix invalide.")

  1. Code Morse

Inventé en 1836, le code Morse encode lettres, chiffres et signes de ponctuation en séquences de points et de traits. Voici un dictionnaire Python qui implémente la table de correspondance standard :


CODE_MORSE = {
    'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
    'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---',
    'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---',
    'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
    'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--',
    'Z': '--..',
    '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....',
    '6': '-....', '7': '--...', '8': '---..', '9': '----.', '0': '-----',
    ', ': '--..--', '.': '.-.-.-', '?': '..--..', '/': '-..-.',
    '-': '-....-', '(': '-.--.', ')': '-.--.-'
}

Parfois, les symboles sont remplacés par ‘0’ et ‘1’ ou d’autres paires. Si un texte montre des séparaitons nettes (espaces), il peut s’agir de code Morse. Les fonctions suivantes permettent le codage et le décodage :


def encoder_morse(texte):
    res = ""
    for c in texte:
        if c.upper() in CODE_MORSE:
            res += CODE_MORSE[c.upper()] + " "
        else:
            res += c
    return res

def decoder_morse(texte):
    res = ""
    for symbole in texte.split():
        if symbole in CODE_MORSE.values():
            for lettre, code in CODE_MORSE.items():
                if code == symbole:
                    res += lettre
                    break
        else:
            res += symbole
    return res

while True:
    print("1. Encoder en Morse")
    print("2. Décoder du Morse")
    print("3. Quitter")
    choix = input("Votre choix : ")
    if choix == "1":
        entree = input("Texte à encoder : ")
        print("Résultat : " + encoder_morse(entree))
    elif choix == "2":
        entree = input("Code Morse à décoder : ")
        print("Résultat : " + decoder_morse(entree))
    elif choix == "3":
        break
    else:
        print("Choix invalide.")

Étiquettes: atbash morse Python Chiffrement

Publié le 15 juillet à 21h31