Byg dit eget vigenere kryptering i python

Introduktion

I 1500-tallet opfandt Blaise de Vigenère en ny type chiffer, der skulle være umuligt at knække i over 300 år! Mens Cæsar-chifferet altid rykker alle bogstaver det samme antal pladser, bruger Vigenère-chifferet et nøgleord til at bestemme forskydningen for hvert bogstav individuelt. Dette gjorde det meget sværere at knække, da samme bogstav kunne krypteres forskelligt afhængigt af sin position i beskeden. Det blev kaldt “le chiffre indéchiffrable” (det uknækkelige chiffer) indtil det endelig blev knækket i 1800-tallet.

Lav din egen Vigenère Cipher

Forudsætninger: 

Samlet løsning

				
					def vigenere(text, keyword, decrypt=False):
    
    keyword = ''.join([c for c in keyword if c.isalpha()]).upper()
    if not keyword:
        return "FEJL: Nøgleordet skal indeholde mindst ét bogstav."
    
    result = []
    key_len = len(keyword)
    key_index = 0
    
    for ch in text:
        if ch.isalpha():
            
            if ch.isupper():
                base = ord('A')
            else:
                base = ord('a')
            
            
            shift = ord(keyword[key_index % key_len]) - ord('A')
            
            if decrypt:
                shift = -shift
            
            
            new_char_code = (ord(ch) - base + shift) % 26 + base
            result.append(chr(new_char_code))
            
            key_index += 1
        else:
            result.append(ch)
    
    return ''.join(result)

print("Velkommen til Vigenère-chifferet!")
print("Programmet kan kryptere og dekryptere med et nøgleord.")

while True:
    print("\nMenu:")
    print("1. Krypter")
    print("2. Dekrypter")
    print("3. Afslut")
    choice = input("Vælg 1, 2 eller 3: ").strip()
    
    if choice == '1':
        msg = input("Indtast besked, der skal krypteres: ")
        key = input("Indtast nøgleord: ")
        encrypted = vigenere(msg, key, decrypt=False)
        print("Krypteret besked:", encrypted)
        
    elif choice == '2':
        msg = input("Indtast besked, der skal dekrypteres: ")
        key = input("Indtast nøgleord: ")
        decrypted = vigenere(msg, key, decrypt=True)
        print("Dekrypteret besked:", decrypted)
        
    elif choice == '3':
        print("Farvel!")
        break
    else:
        print("Ugyldigt valg, prøv igen.")