def f(a,b):
    return a**b


def chiffrement(mode,cle,texte):        # Système DES "élémentaire"

    Z = len(cle)
    Y = Z // 2
    N = len(texte) // len(cle)
    nouveau_texte = ""

    K=[]
    for car in cle:
        K += [ord(car) - 65]

    for n in range(N):
        texte_coupe = texte[n*len(cle):(n+1)*len(cle)]       
       
        M=[]
        for car in texte_coupe:
            M += [ord(car) - 65]

        C=[0]*Z
        
        if mode == "E":
            
            for i in range(Y):
                C[i] = (M[i] + f(K[i],M[i+Y])) % 26
    
            for i in range(Y):
                C[i+Y] = (M[i+Y] + f(K[i+Y],C[i])) % 26
                
        else:

            for i in range(Y):
                C[i+Y] = (M[i+Y] - f(K[i+Y],M[i])) % 26
   
            for i in range(Y):
                C[i] = (M[i] - f(K[i],C[i+Y])) % 26
   
        for i in range(Z): 
            nouveau_texte += chr(C[i] + 65)

    return(nouveau_texte)


cle=" "
while len(cle) % 2 != 0:
    cle = input("Clé (de longueur paire):")

texte = " "
while len(texte) % len(cle) != 0:
    texte = input("Message (de longueur multiple de la clé):")

texte_chiffre = chiffrement("E",cle,texte)
print("Texte chiffré:",texte_chiffre)

texte_dechiffre = chiffrement("D",cle,texte_chiffre)
print("Texte déchiffré:",texte_dechiffre)