module td_1a.vigenere#

Short summary#

module ensae_teaching_cs.td_1a.vigenere

Quelques fonctions à propos d’une séance 3.

source on GitHub

Functions#

function

truncated documentation

CasseVigenere

Appelle les deux fonctions DecodeVigenereLongueurCle() et DecodeVigenereCle() pour casser le code de Vigenère. …

code_vigenere

Crypte et décrypte le code de Vigenère sachant la clé connue.

CodeVigenere

DecodeVigenere

DecodeVigenereCle

Détermine la cle du message code, connaissant sa longueur, on suppose que la lettre E est la lettre la plus fréquente …

DecodeVigenereLongueurCle

Cette fonction determine la longueur de la clé, elle repère les groupes de trois lettres qui se répète dans le message …

PGCD

Détermine le PGCD de deux entiers.

Documentation#

Quelques fonctions à propos d’une séance 3.

source on GitHub

ensae_teaching_cs.td_1a.vigenere.CasseVigenere(message)#

Appelle les deux fonctions DecodeVigenereLongueurCle et DecodeVigenereCle pour casser le code de Vigenère.

Paramètres:

message – message codé

Renvoie:

message décodé (sans la clé)

source on GitHub

ensae_teaching_cs.td_1a.vigenere.DecodeVigenereCle(code, lc)#

Détermine la cle du message code, connaissant sa longueur, on suppose que la lettre E est la lettre la plus fréquente

Paramètres:
  • code – message codé

  • lc – longueur probable de la clé

Renvoie:

message décodé

source on GitHub

ensae_teaching_cs.td_1a.vigenere.DecodeVigenereLongueurCle(message, mot=3)#

Cette fonction determine la longueur de la clé, elle repère les groupes de trois lettres qui se répète dans le message codé et suppose qu’il y a une très forte probabilité qu’un même groupe de trois lettres soit codé avec les mêmes trois lettres du message et les mêmes trois lettres de la clé.

message  : .....DES...........DES...........DES.........DES....DES
cle      : ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD
code     : .....EGV.........................EGV.........EGV..........
distance :      <----------24--------------><----8----->

La longueur de la clé divise le PGCD de 24 et 8.

Paramètres:
  • message – message codé

  • mot – longueur des séquences de lettres consécutifs dont on étudie la féquence

Renvoie:

longueur probable de la clé

source on GitHub

ensae_teaching_cs.td_1a.vigenere.PGCD(m, n)#

Détermine le PGCD de deux entiers.

Paramètres:
  • m – premier entier

  • n – second entier

Renvoie:

PGCD

calcul du PGCD avec la méthode des soustractions

La fonction qui suit est l’implémentation en Python de la méthode décrite ici : Algorithme de calcul du PGCD par soustractions successives.

<<<

def PGCD(m, n):
    if m == 1 or n == 1:
        return 1
    if m == n:
        return m
    if m < n:
        return PGCD(m, n - m)
    return PGCD(n, m - n)


print(PGCD(50, 40))

>>>

    10

source on GitHub

ensae_teaching_cs.td_1a.vigenere.code_vigenere(message, cle, decode=False, binary=False)#

Crypte et décrypte le code de Vigenère sachant la clé connue.

Paramètres:
  • message – message à crypter ou décrypter

  • cle – clé du code

  • decode – False: crypte, True: décrypte

  • binary – code et décode en binaire

Renvoie:

le message crypté ou décrypté

code de Vigenère

<<<

def code_vigenere(message, cle, decode=False):
    message_code = ""
    for i, c in enumerate(message):
        d = cle[i % len(cle)]
        d = ord(d) - 65
        if decode:
            d = 26 - d
        message_code += chr((ord(c) - 65 + d) % 26 + 65)
    return message_code


m = "JENESUISPASCODE"
c = code_vigenere(m, "DOP")
d = code_vigenere(c, "DOP", True)
print(c, d)

>>>

    MSCHGJLGEDGRRRT JENESUISPASCODE

source on GitHub