Rating:

# Whose Base Is It Anyway



## FLAG:
`UMDCTF-{1t_w@s_my_b@535}`
#
## Solution
As it transpires from the description, it is necessary to convert the string contained in [ctext.txt](ctext.txt) into various bases, in succession.

The process was done by following the same procedure for most conversions:

### Base 2 -> Base 4
- set A = 0, B = 1;
- convert to base 4;
- rebuild the string.

These simple operations were carried out through the execution of the following code:
```python
ciph = open("ctext.txt", "r").read().strip()

ciph = ciph.replace("A", "0")
ciph = ciph.replace("B", "1")

num = int(ciph, 2)
by = bytes.fromhex(hex(num)[2:]).decode()
print(by)
```
The result of running that code is

```console
asd@asd:~/Scrivania/UMDCTF$ python3 whose.py
BAADBAACBAADBABBBABDBAACBAABBABDBAADBAADBABDBABBBAADBABCBAACBABBBAADBAACBABBBABBBAADBABCBAABBABCBAADBAACBAABBABBBABABAACBAABBABABAADBAACBAADBABBBABDBAACBAABBABDBAADBAABBABDBABBBAADBABCBAACBAABBAADBAACBAADBABBBABABABCBAABBABCBAADBAADBABDBABBBAADBABCBAABBABDBAADBAACBAADBABCBAABBAACBAABBABDBAADBAACBAADBABBBAADBABCBAABBABBBAADBAACBABBBABBBABCBAACBAABBABCBAADBABBBAABBABBBAADBABCBAACBACABAADBAACBABDBABBBAADBAACBAABBABCBAADBAADBAABBABBBAADBABCBAACBAADBAADBAACBABBBABBBAACBABCBAABBABDBAADBAABBABDBABBBABABAACBAACBABABAADBAACBAADBABBBABBBAACBAABBABCBAADBABABABDBABBBAADBABCBAACBAADBAADBAACBABBBABBBABABAACBAABBABDBAADBAABBABBBABBBABABAACBAABBABCBAADBAACBABBBABBBAADBABCBAABBABCBAADBAADBAABBABBBAADBABCBAACBABDBAADBAACBAADBABBBABCBABCBAABBABCBAADBABABABBBABBBAADBABCBAACBAABBAADBAACBABBBABBBABCBAACBAABBABDBAADBAADBABDBABBBABABAACBAABBABBBAADBAACBABBBABBBABCBABCBAABBABCBAADBABABABDBABBBAADBABCBAACBACABAADBAACBAADBABBBAACBAACBAABBABDBAADBAACBAADBABBBAADBABCBAABBABBBAADBAACBABBBABBBAADBABCBAABBABCBAADBABABAADBABBBABABABCBAABBAADBAADBAACBAADBABBBABDBAACBAABBABDBAADBAADBABBBABBBABABABCBAABBABBBAADBAACBABBBABBBAACBAAB
```

### Base 4 -> Base 8
- set A = 0, B = 1, C = 2, D = 3;
- convert to base 8;
- rebuild the string.

These simple operations were carried out through the execution of the following code:
```python
ciph = "BAADBAACBAADBABBBABDBAACBAABBABDBAADBAADBABDBABBBAADBABCBAACBABBBAADBAACBABBBABBBAADBABCBAABBABCBAADBAACBAABBABBBABABAACBAABBABABAADBAACBAADBABBBABDBAACBAABBABDBAADBAABBABDBABBBAADBABCBAACBAABBAADBAACBAADBABBBABABABCBAABBABCBAADBAADBABDBABBBAADBABCBAABBABDBAADBAACBAADBABCBAABBAACBAABBABDBAADBAACBAADBABBBAADBABCBAABBABBBAADBAACBABBBABBBABCBAACBAABBABCBAADBABBBAABBABBBAADBABCBAACBACABAADBAACBABDBABBBAADBAACBAABBABCBAADBAADBAABBABBBAADBABCBAACBAADBAADBAACBABBBABBBAACBABCBAABBABDBAADBAABBABDBABBBABABAACBAACBABABAADBAACBAADBABBBABBBAACBAABBABCBAADBABABABDBABBBAADBABCBAACBAADBAADBAACBABBBABBBABABAACBAABBABDBAADBAABBABBBABBBABABAACBAABBABCBAADBAACBABBBABBBAADBABCBAABBABCBAADBAADBAABBABBBAADBABCBAACBABDBAADBAACBAADBABBBABCBABCBAABBABCBAADBABABABBBABBBAADBABCBAACBAABBAADBAACBABBBABBBABCBAACBAABBABDBAADBAADBABDBABBBABABAACBAABBABBBAADBAACBABBBABBBABCBABCBAABBABCBAADBABABABDBABBBAADBABCBAACBACABAADBAACBAADBABBBAACBAACBAABBABDBAADBAACBAADBABBBAADBABCBAABBABBBAADBAACBABBBABBBAADBABCBAABBABCBAADBABABAADBABBBABABABCBAABBAADBAADBAACBAADBABBBABDBAACBAABBABDBAADBAADBABBBABBBABABABCBAABBABBBAADBAACBABBBABBBAACBAAB"

ciph = ciph.replace("A", "0")
ciph = ciph.replace("B", "1")
ciph = ciph.replace("C", "2")
ciph = ciph.replace("D", "3")

num = int(ciph, 4)
by = bytes.fromhex(hex(num)[2:]).decode()
print(by)
```
The result of running that code is

```console
asd@asd:~/Scrivania/UMDCTF$ python3 whose.py
CBCEGBAGCCGECFBECBEECFAFCBAEDBADCBCEGBAGCAGECFBACBCEDFAFCCGECFAGCBCFABAGCBCECFAECBEEFBAFCEAECFBHCBGECBAFCCAECFBCCBEEBFAGCAGEDBBDCBCEEBAFCDGECFBCCBEEDBAGCAEEDBAFCBEECFAFCCAECFBGCBCEFFAFCDEECFBACBEEFBAGCCGEDBAECBEEFFAFCDGECFBHCBCEBBAGCBCECFAECBEECFAFCDCEDFACCBCEGBAGCCEEDFAECBEEBA
```

### Base 8 -> Base 16
- set A = 0, B = 1, C = 2, D = 3, E = 4, F = 5, G = 6, H = 7;
- convert to base 16;
- rebuild the string.

These simple operations were carried out through the execution of the following code:
```python
ciph = "CBCEGBAGCCGECFBECBEECFAFCBAEDBADCBCEGBAGCAGECFBACBCEDFAFCCGECFAGCBCFABAGCBCECFAECBEEFBAFCEAECFBHCBGECBAFCCAECFBCCBEEBFAGCAGEDBBDCBCEEBAFCDGECFBCCBEEDBAGCAEEDBAFCBEECFAFCCAECFBGCBCEFFAFCDEECFBACBEEFBAGCCGEDBAECBEEFFAFCDGECFBHCBCEBBAGCBCECFAECBEECFAFCDCEDFACCBCEGBAGCCEEDFAECBEEBA"

ciph = ciph.replace("A", "0")
ciph = ciph.replace("B", "1")
ciph = ciph.replace("C", "2")
ciph = ciph.replace("D", "3")
ciph = ciph.replace("E", "4")
ciph = ciph.replace("F", "5")
ciph = ciph.replace("G", "6")
ciph = ciph.replace("H", "7")

result = ""
for i in range(0, len(ciph)-7, 8):
num = int(ciph[i:i+8], 8)
result += bytes.fromhex(hex(num)[2:]).decode()
print(result)
```
The result of running that code is

```console
asd@asd:~/Scrivania/UMDCTF$ python3 whose.py
ELFKELFEEDFCELFCEHEGEKEFEPFEEDFJEPEOGDEHEJFCFCFKEHEOEJFFFBFEFEEHENEKENEHFJFKFDFKEOEOEBFEEDFEEMGBELFJGD
```

### Base 16 -> Base 32
- set A = 0, B = 1, C = 2, D = 3, E = 4, F = 5, G = 6, H = 7, I = 8, J = 9, K = A, L = B, M = C, N = D, O = E, P = F;
- convert to base 16;
- rebuild the string.

These simple operations were carried out through the execution of the following code:
```python
ciph = "ELFKELFEEDFCELFCEHEGEKEFEPFEEDFJEPEOGDEHEJFCFCFKEHEOEJFFFBFEFEEHENEKENEHFJFKFDFKEOEOEBFEEDFEEMGBELFJGD"

ciph = ciph.replace("A", "0")
ciph = ciph.replace("B", "1")
ciph = ciph.replace("C", "2")
ciph = ciph.replace("D", "3")
ciph = ciph.replace("E", "4")
ciph = ciph.replace("F", "5")
ciph = ciph.replace("G", "6")
ciph = ciph.replace("H", "7")
ciph = ciph.replace("I", "8")
ciph = ciph.replace("J", "9")
ciph = ciph.replace("K", "A")
ciph = ciph.replace("L", "B")
ciph = ciph.replace("M", "C")
ciph = ciph.replace("N", "D")
ciph = ciph.replace("O", "E")
ciph = ciph.replace("P", "F")

result = ""
for i in range(0, len(ciph), 16):
num = int(ciph[i:i+16], 16)
result += bytes.fromhex(hex(num)[2:]).decode()
print(result)
```
The result of running that code is

```console
asd@asd:~/Scrivania/UMDCTF$ python3 whose.py
KZKTCRKRGFJEOTCYONcGIRRZGNIUQTTGMJMGYZSZNNATCTLaKYc
```

### Base 32 -> Base 64
By adding an *a* to the end of the string and thanks to [CyberChef](https://gchq.github.io/CyberChef/#recipe=From_Base32('A-Za-z2-7%2B/%3D',true)From_Base64('A-Za-z0-9%2B/%3D',true)&input=S1pLVENSS1JHRkpFT1RDWU9OY0dJUlJaR05JVVFUVEdNSk1HWVpTWk5OQVRDVExhS1ljYQ) we got the flag !




Original writeup (https://github.com/hackalcubo/CTF-Writeups/tree/main/UMDCTF-2021/Crypto/Whose%20Base%20Is%20It%20Anyway).