First Commit

This commit is contained in:
kar
2026-03-01 20:29:43 -06:00
commit 57810b4dc3
2 changed files with 153 additions and 0 deletions
+148
View File
@@ -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()