vigenere_cipher.py
# Import sys for system operations and colorama for colored output. import sys from colorama import init, Fore # Initialise colorama init() # Function to Encrypt using the Vigenère cipher. def vigenere_encrypt(plain_text, key): encrypted_text = '' # Repeat the key to match the length of the plaintext. key_repeated = (key * (len(plain_text) // len(key))) + key[:len(plain_text) % len(key)] # Iterate through each character in the plaintext. for i in range(len(plain_text)): # Check if the character is an alphabet letter. if plain_text[i].isalpha(): # Calculate the shift based on the corresponding key letter. shift = ord(key_repeated[i].upper()) - ord('A') # Encrypt uppercase and lowercase letters separately. if plain_text[i].isupper(): encrypted_text += chr((ord(plain_text[i]) + shift - ord('A')) % 26 + ord('A')) else: encrypted_text += chr((ord(plain_text[i]) + shift - ord('a')) % 26 + ord('a')) else: # If the character is not an alphabet letter, keep it unchanged. encrypted_text += plain_text[i] # Return the final encrypted text return encrypted_text # Decryption function for the Vigenère cipher def vigenere_decrypt(cipher_text, key): decrypted_text = '' # Repeat the key to match the length of the ciphertext key_repeated = (key * (len(cipher_text) // len(key))) + key[:len(cipher_text) % len(key)] # Iterate through each character in the ciphertext for i in range(len(cipher_text)): # Check if the character is an alphabet letter if cipher_text[i].isalpha(): # Calculate the shift based on the corresponding key letter shift = ord(key_repeated[i].upper()) - ord('A') # Decrypt uppercase and lowercase letters separately if cipher_text[i].isupper(): decrypted_text += chr((ord(cipher_text[i]) - shift - ord('A')) % 26 + ord('A')) else: decrypted_text += chr((ord(cipher_text[i]) - shift - ord('a')) % 26 + ord('a')) else: # If the character is not an alphabet letter, keep it unchanged decrypted_text += cipher_text[i] # Return the final decrypted text return decrypted_text key = "KEY" # Get user input (Message to encrypt). plaintext = input('[!] Enter your message: ') # Encrypt the plaintext using the Vigenère cipher cipher_text = vigenere_encrypt(plaintext, key) # Print the results print(f"[+] Plaintext: {plaintext}") print(f"{Fore.GREEN}[+] Ciphertext: {cipher_text}") # Ask if user wants to decrypt the message (just to see the functionality.) ask_to_decrypt = input('\n\n[?] Do you want to decrypt the message?\n[?] Y or N: ').lower() # If user wants to. if ask_to_decrypt == 'y': # Decrypt the ciphertext back to the original plaintext. decrypted_text = vigenere_decrypt(cipher_text, key) print(f"{Fore.GREEN}[+] Decrypted text: {decrypted_text}") # If user does not want to. elif ask_to_decrypt == 'n': sys.exit() # When an invalid input is entered. else: print(f"{Fore.RED}[-] Invalid input.")Join 50,000+ Python Programmers & Enthusiasts like you!
Email address Subscribe This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.Ethical Hacking with Python EBook
Web Security with Python EBook
Cryptography with Python EBook
Practical Python PDF Processing EBook
Real-Time Traffic Monitoring System with YOLOv9 eBook
Mastering YOLO: Build an Automatic Number Plate Recognition System
© 2026 The Python Code. All rights reserved.