picoctf/crypto/basic_mod2/solve.py

27 lines
777 B
Python
Raw Normal View History

2024-09-02 23:42:46 +02:00
#!/usr/bin/env python3
# Take each number mod 41 and find the modular inverse for the result. Then map to the following character set: 1-26 are the alphabet, 27-36 are the decimal digits, and 37 is an underscore.
with open('message.txt') as file:
content = file.read().strip()
print("picoCTF{", end="")
for n in content.split(' '):
number = int(n)
number %= 41
# NOTE: modular inverse
number = pow(number, -1, 41)
if number >=1 and number < 27:
print(chr(number - 1 + ord('A')), end="")
elif number >= 27 and number < 37:
print(number - 27, end="")
elif number == 37:
print('_', end="")
else:
print()
print(f"Code author seems to have forgotten a number.... {number}")
exit(1)
print("}")