You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.2 KiB
96 lines
2.2 KiB
import random
|
|
from rich.console import Console
|
|
from rich.prompt import Confirm, Prompt, IntPrompt
|
|
from rich.markdown import Markdown
|
|
|
|
from cryptography_s_des_exploring.sdes.decrypt import decrypt
|
|
from cryptography_s_des_exploring.sdes.encrypt import encrypt
|
|
|
|
|
|
def yes_no_prompt(question: str) -> bool:
|
|
return Confirm.ask(question)
|
|
|
|
|
|
def cli_generate_keys(console):
|
|
KEY_LENGTH = 10
|
|
key = ''.join(random.choice('01') for _ in range(KEY_LENGTH))
|
|
|
|
console.print(f"[yellow b]The key:[/] {key}\n")
|
|
|
|
|
|
def cli_key_input(console):
|
|
while True:
|
|
key = Prompt.ask(f"[b]Enter the [yellow]key[/]", password=True)
|
|
|
|
if len(key) == 10 and len(key.replace('0', '').replace('1', '')) == 0:
|
|
return key
|
|
|
|
console.print(
|
|
"[red b][Error] THE KEY MUST BE 10 CHARACTERS LONG AND CONTAIN ONLY 1 OR 0 SYMBOLS!!![/]\n"
|
|
)
|
|
|
|
|
|
def cli_encrypt_message(console):
|
|
key = cli_key_input(console)
|
|
|
|
message = Prompt.ask(f"[b]Enter the [yellow]message[/]")
|
|
|
|
ciphertext = encrypt(key, message)
|
|
|
|
console.print(f"[yellow b]The ciphertext:[/] \"{ciphertext.decode('utf-8')}\"\n")
|
|
|
|
|
|
def cli_decrypt_message(console):
|
|
key = cli_key_input(console)
|
|
|
|
ciphertext = Prompt.ask(f"[b]Enter the [yellow]ciphertext[/]")
|
|
|
|
message = decrypt(key, ciphertext)
|
|
|
|
console.print(f"[yellow b]The message:[/] \"{message}\"\n")
|
|
|
|
|
|
COMMANDS = """
|
|
0. Help
|
|
1. Generate a key.
|
|
2. Encrypt a message
|
|
3. Decrypt a message
|
|
4. Exit
|
|
|
|
"""
|
|
|
|
HELP = """
|
|
# cryptography-s-des-exploring
|
|
|
|
cryptography-s-des-exploring is the application that will help you to learn about the S-DES cipher.
|
|
|
|
## Commands
|
|
|
|
"""
|
|
|
|
|
|
def help(console):
|
|
console.print(Markdown(HELP + COMMANDS))
|
|
console.print("\n")
|
|
|
|
|
|
def cli():
|
|
console = Console()
|
|
choices = list(map(str, range(0, 5)))
|
|
|
|
while True:
|
|
console.print(f"Commands:\n{COMMANDS}")
|
|
option = Prompt.ask("Choose the command:", choices=choices, default="0")
|
|
match option:
|
|
case "0":
|
|
help(console)
|
|
case "1":
|
|
cli_generate_keys(console)
|
|
case "2":
|
|
cli_encrypt_message(console)
|
|
case "3":
|
|
cli_decrypt_message(console)
|
|
case "4":
|
|
break
|
|
|