diff --git a/main.py b/main.py new file mode 100644 index 0000000..0526f1c --- /dev/null +++ b/main.py @@ -0,0 +1,131 @@ +import sys +import platform + +def encode(m): + m = bytearray(m, "ascii") + message = format(int.from_bytes(m, "big"), "b") + generator = "10001000000100001" + gen_deg = len(generator) + + message += "0" * (gen_deg - 1) + while len(message) % 8 != 0: + message = "0" + message + + swapped = list(message) + for i in range(gen_deg - 1): + if swapped[i] == "0": + swapped[i] = "1" + else: + swapped[i] = "0" + + message = "".join(swapped) + + while True: + + if message[0] == "0": + message = message[1:] + else: + chunk = message[:gen_deg] + + if len(chunk) < gen_deg: + + while len(chunk) % 8 != 0: + chunk = "0" + chunk + + fb = str(hex(int(chunk[:8], 2)))[2:] + + if len(fb) == 1: + fb = "0" + fb + + sb = str(hex(int(chunk[8:], 2)))[2:] + + if len(sb) == 1: + sb = "0" + sb + + m += b"\\x" + bytes(fb, "ascii") + m += b"\\x" + bytes(sb, "ascii") + return m + + remainder = format(int(chunk, 2) ^ int(generator, 2), "b") + message = remainder + message[gen_deg:] + + +def decode(n): + + if platform.system() == "Windows": + n = n.split("\\\\x") + else: + n = n.split("\\x") + + msg = n[0] + message = "" + + for ch in msg: + + ch = bin(ord(ch))[2:] + + while len(ch) < 8: + ch = "0" + ch + + message += str(ch) + + fb = bin(int(n[1], 16))[2:] + + while len(fb) < 8: + fb = "0" + fb + + sb = bin(int(n[2], 16))[2:] + + while len(sb) < 8: + sb = "0" + sb + + message += fb + sb + generator = "10001000000100001" + gen_deg = len(generator) + + while len(message) % 8 != 0: + message = "0" + message + + swapped = list(message) + for i in range(gen_deg - 1): + if swapped[i] == "0": + swapped[i] = "1" + else: + swapped[i] = "0" + + message = "".join(swapped) + + while True: + + if '1' not in message: + return True + + if message[0] == "0": + message = message[1:] + else: + chunk = message[:gen_deg] + + if len(chunk) < gen_deg: + return False + + remainder = format(int(chunk, 2) ^ int(generator, 2), "b") + message = remainder + message[gen_deg:] + + +if __name__ == "__main__": + + if len(sys.argv) < 2: + print("Proszę wprowadzić jedną z flag:\n") + print(" -e, --encode\tZakoduj ") + print(" -d, --decode\tDekoduj \n") + print("Przykład:") + print("python main.py -e abc") + print("python main.py -d abc\\\\x51\\\\x4a") + else: + if sys.argv[1] == "-e" or sys.argv[1] == "--encode": + print(encode(sys.argv[2])) + elif sys.argv[1] == "-d" or sys.argv[1] == "--decode": + print(decode(sys.argv[2])) + + +