First Commit
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
ALFABETO="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
ROTOR_I="EKMFLGDQVZNTOWYHXUSPAIBRCJ"
|
||||
ROTOR_II="AJDKSIRUXBLHWTMCQGZNPYFVOE"
|
||||
ROTOR_III="BDFHJLCPRTXVZNYEIWGAKMUSQO"
|
||||
REFLECTOR="YRUHQSLDPXNGOKMIEBFZCWVJAT"
|
||||
+148
@@ -0,0 +1,148 @@
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
def menu():
|
||||
opc = 0
|
||||
print("===SELECTOR===")
|
||||
print("1) Crypt Word")
|
||||
print("2) Decrypt Word")
|
||||
print("3) Exit")
|
||||
opc = int(input("Select Option: "))
|
||||
if opc == 1:
|
||||
crypt_word()
|
||||
elif opc == 2:
|
||||
pass
|
||||
else:
|
||||
os._exit(1)
|
||||
|
||||
def load_rotors(rotor_opc):
|
||||
alfabeto = os.getenv("ALFABETO")
|
||||
rotor_I = os.getenv("ROTOR_I")
|
||||
rotor_II = os.getenv("ROTOR_II")
|
||||
rotor_III = os.getenv("ROTOR_III")
|
||||
reflector = os.getenv("REFLECTOR")
|
||||
|
||||
if rotor_opc == 1:
|
||||
return rotor_I
|
||||
elif rotor_opc == 2:
|
||||
return rotor_II
|
||||
elif rotor_opc == 3:
|
||||
return rotor_III
|
||||
elif rotor_opc == "alfabeto":
|
||||
return alfabeto
|
||||
elif rotor_opc == "reflector":
|
||||
return reflector
|
||||
|
||||
def map_key(rotor_opc, char_key):
|
||||
rotor = load_rotors(rotor_opc)
|
||||
print(f"Rotor {rotor_opc} cargado...")
|
||||
print(f"Buscando valor de {char_key} en rotor {rotor_opc}")
|
||||
obj = char_key.upper()
|
||||
for index, char_key_upper in enumerate(rotor):
|
||||
if char_key_upper == obj:
|
||||
print(f"{char_key} tiene la posicion de {index}")
|
||||
return index
|
||||
|
||||
|
||||
|
||||
def map_char(rotor_opc, char):
|
||||
rotor = load_rotors(rotor_opc)
|
||||
print(f"Rotor {rotor_opc} cargado...")
|
||||
print(f"Buscando valor de {char} en rotor {rotor_opc}")
|
||||
obj = char.upper()
|
||||
for index, char_upper in enumerate(rotor):
|
||||
if char_upper == obj:
|
||||
char_pos = index
|
||||
print(f"{char} tiene la posicion de {char_pos}")
|
||||
return char_pos
|
||||
|
||||
def find_char(rotor_opc, index):
|
||||
rotor = load_rotors(rotor_opc)
|
||||
print(f"Rotor {rotor_opc} cargado...")
|
||||
print(f"Buscando el valor de la posicion {index} en rotor {rotor_opc}")
|
||||
index_seguro = index % 26
|
||||
value = rotor[index_seguro]
|
||||
return value
|
||||
|
||||
def compare_value_notch(value_char, notch_value, key_pos):
|
||||
if value_char != notch_value:
|
||||
return key_pos
|
||||
else:
|
||||
key_pos = (key_pos + 1) % 26
|
||||
print(f"VALOR DEL KEY MODIFICADO A {key_pos}")
|
||||
return key_pos
|
||||
|
||||
|
||||
|
||||
def main_cipher_logic(word, key):
|
||||
palabra_cifrada = [0] * len(word)
|
||||
print(f"Mapeando key {key} en alfabeto")
|
||||
key_positions = [0] * len(key)
|
||||
for i, char_key in enumerate(key):
|
||||
char_key_pos = map_key("alfabeto", char_key)
|
||||
key_positions[i] = char_key_pos
|
||||
|
||||
|
||||
for i, char in enumerate(word):
|
||||
char_pos = map_char("alfabeto", char)
|
||||
x = ((char_pos + key_positions[0]) % 26)
|
||||
value_char = find_char(1, x)
|
||||
key_positions[0] = compare_value_notch(value_char, "Q", key_positions[0])
|
||||
|
||||
x = ((map_char("alfabeto", value_char) + key_positions[1]) % 26)
|
||||
value_char = find_char(2, x)
|
||||
key_positions[1] = compare_value_notch(value_char, "E", key_positions[1])
|
||||
|
||||
x = ((map_char("alfabeto", value_char) + key_positions[2]) % 26 )
|
||||
value_char = find_char(3, x)
|
||||
key_positions[2] = compare_value_notch(value_char, "V", key_positions[2])
|
||||
|
||||
# buscamos en el referector
|
||||
index = map_char("alfabeto", value_char)
|
||||
char_from_reflector = find_char("reflector", index)
|
||||
|
||||
#index = map_char("alfabeto", value_char)
|
||||
#print(index)
|
||||
#x = find_char("reflector", index)
|
||||
|
||||
x = map_char(3, char_from_reflector)
|
||||
key_positions[2] = compare_value_notch(value_char, "V", key_positions[2])
|
||||
x = (((x) - key_positions[2]) % 26)
|
||||
|
||||
value_char = find_char("alfabeto", x)
|
||||
x = map_char(2, value_char)
|
||||
key_positions[1] = compare_value_notch(value_char, "E", key_positions[1])
|
||||
x = (((x) - key_positions[1]) % 26)
|
||||
|
||||
value_char = find_char("alfabeto", x)
|
||||
x = map_char(1, value_char)
|
||||
key_positions[0] = compare_value_notch(value_char, "Q", key_positions[0])
|
||||
final = (((x) - key_positions[0]) % 26)
|
||||
|
||||
char_cipher=find_char("alfabeto", final)
|
||||
|
||||
print(f"Letra {char}\nCifrado {char_cipher}")
|
||||
|
||||
palabra_cifrada[i] = char_cipher
|
||||
|
||||
return "".join(palabra_cifrada)
|
||||
|
||||
def crypt_word():
|
||||
word=input("Word to crypt: ")
|
||||
key=input("Key Word (the key length must be 3 letters): ")
|
||||
if len(key) != 3:
|
||||
print("THE KEY LENGHT MUST BE 3 LETTERS")
|
||||
os._exit(1)
|
||||
crypted_word=main_cipher_logic(word, key)
|
||||
print(f"Word in plain text: {word}")
|
||||
print(f"Crypted word: {crypted_word}")
|
||||
|
||||
|
||||
|
||||
|
||||
## main
|
||||
|
||||
menu()
|
||||
|
||||
Reference in New Issue
Block a user