Files
EnigmaMachine/main.py

119 lines
3.2 KiB
Python
Raw Normal View History

2025-10-26 11:40:29 -04:00
import random
2025-09-04 12:51:05 -04:00
import sys
import time
2025-09-04 12:51:05 -04:00
alphaBase = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,. !="
def main():
2025-10-26 11:40:29 -04:00
### Argument validation ###
if len(sys.argv) < 7:
print("Usage: uv run main.py [0-58] [0-58] [0-58] '[message]' 'e|d' [int]")
sys.exit(1)
2025-09-04 12:51:05 -04:00
2025-10-26 11:40:29 -04:00
base_max = len(alphaBase)
if not is_number(sys.argv[1]) or not is_number(sys.argv[2]) or not is_number(sys.argv[3]):
print("Invalid seed value.")
sys.exit(1)
if not is_number(sys.argv[6]):
print("Invalid iterations value.")
sys.exit(1)
if int(sys.argv[1]) == 0 or int(sys.argv[1]) > base_max:
seed1 = random.randint(1, base_max)
else:
seed1 = int(sys.argv[1])
if int(sys.argv[2]) == 0 or int(sys.argv[2]) > base_max:
seed2 = random.randint(1, base_max)
else:
seed2 = int(sys.argv[2])
if int(sys.argv[3]) == 0 or int(sys.argv[3]) > base_max:
seed3 = random.randint(1, base_max)
else:
seed3 = int(sys.argv[3])
if int(sys.argv[6]) < 0:
iterations = 3
else:
iterations = int(sys.argv[6])
### Processing ###
2025-09-04 12:51:05 -04:00
if sys.argv[5] == "e":
2025-10-26 11:40:29 -04:00
for iteration in range(0, iterations):
print("Iteration (not yet in use): ", iteration)
2025-09-04 12:51:05 -04:00
# first iteration
2025-10-26 11:40:29 -04:00
firstIterationResult = encode(seed1, sys.argv[4])
2025-09-04 12:51:05 -04:00
print(firstIterationResult)
2025-10-26 11:40:29 -04:00
secondIterationResult = encode(seed2, sys.argv[4])
2025-09-04 12:51:05 -04:00
print(secondIterationResult)
2025-10-26 11:40:29 -04:00
thirdIterationResult = encode(seed3, sys.argv[4])
# print(thirdIterationResult)
print("Seeds: ", seed1, seed2, seed3, thirdIterationResult)
elif sys.argv[5] == "d":
firstIterationResult = decode(seed1, sys.argv[4])
2025-09-04 12:51:05 -04:00
print(firstIterationResult)
2025-10-26 11:40:29 -04:00
secondIterationResult = decode(seed2, sys.argv[4])
2025-09-04 12:51:05 -04:00
print(secondIterationResult)
2025-10-26 11:40:29 -04:00
thirdIterationResult = decode(seed3, sys.argv[4])
2025-09-04 12:51:05 -04:00
print(thirdIterationResult)
2025-10-26 11:40:29 -04:00
else:
print("Invalid option!")
sys.exit(1)
2025-09-04 12:51:05 -04:00
def encode(offset, message):
print("Encoding!")
current_timestamp = time.time()
print(current_timestamp)
2025-09-04 12:51:05 -04:00
resultMessage = ""
for indexA in range(len(message)):
for indexB in range(len(alphaBase)):
if message[indexA] == alphaBase[indexB]:
location = indexB + offset
if location > (len(alphaBase) - 1):
location = location - (len(alphaBase) - 1)
resultMessage = resultMessage + alphaBase[location]
break
return resultMessage
def decode(offset, message):
print("Decoding!")
resultMessage = ""
for indexA in range(len(message)):
for indexB in range(len(alphaBase)):
if message[indexA] == alphaBase[indexB]:
location = indexB - offset
if location < 0:
location = location + (len(alphaBase) - 1)
resultMessage = resultMessage + alphaBase[location]
break
return resultMessage
2025-10-26 11:40:29 -04:00
def is_number(i):
try:
int(i)
return True
except ValueError:
return False
2025-09-04 12:51:05 -04:00
if __name__ == "__main__":
main()