CTF - base727 - Cryptography - osu!gaming

Ссылка на задачу
crypto/base727

Описание
You: Write a program that encodes any string in base 727
ChatGPT: Here’s a Python program to encode any string into base 727

Файлы
base727.zip

Файл cipher.py:

727.py

import binascii

flag = open('flag.txt').read()

def encode_base_727(string):
    base = 727
    encoded_value = 0

    for char in string:
        encoded_value = encoded_value * 256 + ord(char)

    encoded_string = ""
    while encoded_value > 0:
        encoded_string = chr(encoded_value % base) + encoded_string
        encoded_value //= base

    return encoded_string

encoded_string = encode_base_727(flag)
print(binascii.hexlify(encoded_string.encode()))

Файл out.txt:

out.txt

06c3abc49dc4b443ca9d65c8b0c386c4b0c99fc798c2bdc5bccb94c68c37c296ca9ac29ac790c4af7bc585c59d

Функция encode_base_727 всего лишь преобзазует строку в число и обратно в строку со сменой основания числа с 256 на 727

Чтобы получить флаг нужно выполнить обратную операцию

Меняем основания: 256 на 727, а 727 на 256
Меняем формат ввода/вывода даных

diff

--- a/727.py
+++ b/solve.py
@@ -1,15 +1,16 @@
-flag = open("flag.txt").read()
+encoded_string = open("out.txt").read()
+encoded_string = binascii.unhexlify(encoded_string.encode()).decode()

-def encode_base_727(string):
-    base = 727
+def decode_base_256(string):
+    base = 256
     encoded_value = 0

     for char in string:
-        encoded_value = encoded_value * 256 + ord(char)
+        encoded_value = encoded_value * 727 + ord(char)

     encoded_string = ""
     while encoded_value > 0:
@@ -19,5 +20,5 @@ def encode_base_727(string):
     return encoded_string


-encoded_string = encode_base_727(flag)
-print(binascii.hexlify(encoded_string.encode()))
+decoded_string = decode_base_256(encoded_string)
+print(decoded_string)

Целиком скрипт выглядит так:

solve.py

#!/usr/bin/ python3
import binascii

encoded_string = open("out.txt").read()
encoded_string = binascii.unhexlify(encoded_string.encode()).decode()


def decode_base_256(string):
    base = 256
    encoded_value = 0

    for char in string:
        encoded_value = encoded_value * 727 + ord(char)

    encoded_string = ""
    while encoded_value > 0:
        encoded_string = chr(encoded_value % base) + encoded_string
        encoded_value //= base

    return encoded_string


decoded_string = decode_base_256(encoded_string)
print(decoded_string)

Запускаем скрипт:

bash

$ python3 ./script.py
osu{wysiwysiwysiywsyw******}
  • Элементарная задача. Даже chatGPT может предложить решение ;-)

Похожее