Chiffrement et déchiffrement

1. Passer de la lettre au chiffre

Toutes les techniques de chiffrement et déchiffrement de messages nécessitent, comme leur nom l'indique, de traduire les lettres en chiffres. Une opération de chiffrement ou déchiffrement d'un message consiste à prendre chaque lettre, la transformer en nombre, opérer sur ce nombre, puis retransformer en lettre.

Pour les méthodes que nous allons étudier, on peut se limiter aux 26 lettres de l'alphabet (sans accents) et attribuer à chacune un nombre.

Lorsque l'on travaille "à la main" (papier et crayon), on peut numéroter les lettres de 1 à 26 (ou de 0 à 25). Il suffit de se constituer une grille de traduction sur un papier et on pourra facilement traduire dans les deux sens.

Transformer une lettre en nombre ou un nombre en lettre avec Python

Lorsque l'on travaille sur ordinateur, c'est plus simple de numéroter les lettres entre 0 et 25.

Avec Python, on peut obtenir le code ASCII d'une lettre avec la fonction ord(). Comme les lettres sont dans l'ordre alphabétique, c'est facile de se ramener à une valeur entre 0 et 25 en soustrayant ord("a"). Ainsi, par exemple, ord("c") - ord("a") va s'évaluer à 2, ce qui est bien le numéro correct. La méthode générale est donc:

def lettre_vers_nombre(lettre):
    """Transformer une lettre minuscule non accentuée en un nombre entre 0 et 25."""
    return ord(lettre) - ord("a")

Pour retrouver une lettre, l'opération inverse de ord() est chr(). Il faut bien entendu d'abord ajouter à nouveau le code ASCII correspondant à la lettre "a".

 

def nombre_vers_lettre(nombre):
    """Transformer un nombre entre 0 et 25 en lettre minuscule."""
    return chr(nombre + ord("a"))