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:
- Computer/Laptop
- Internet adgang
- Brug trinket til at udvikle i python https://trinket.io/python
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.")