Буквы флага переведены в их десятичное представление. Для решения нужно получить ключ.
11515195063862318899931685488813747395775516287289682636499965282714637259206269
Solution
Давайте разберем задание подробнее.
message: HELLO
ascii bytes: [72, 69, 76, 76, 79]
hex bytes: [0x48, 0x45, 0x4c, 0x4c, 0x4f]
base-16: 0x48454c4c4f
base-10: 310400273487
Такс. Значит, взяли флаг, разбили его на символы, для каждого символа взяли его ascii-код, перевели его в HEX. Полученные HEX-значения поставили рядом и перевели их в десетичную систему исчисления. Пон…
Разберем как из десятичной системы перевести в шестнадцатиричную:
- Делим число на 16;
- Берем остаток от деления — он станет
hex-значением; - Делим результат на 16, пока не дойдем до 0;
- Записываем остатки в обратном порядке. Это и будет нужное число.
В
HEXмогут быть следующие значения: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11), C(12), D(13), E(14), F(15).
Пример:
| Делим | Частное | Остаток | Остаток (hex) |
|---|---|---|---|
| 310400273487 ÷ 16 | 19375017092 | 15 | F |
| 19375017092 ÷ 16 | 1210938568 | 4 | 4 |
| 1210938568 ÷ 16 | 75683660 | 8 | 8 |
| 75683660 ÷ 16 | 4730228 | 12 | C |
| 4730228 ÷ 16 | 295639 | 4 | 4 |
| 295639 ÷ 16 | 18477 | 7 | 7 |
| 18477 ÷ 16 | 1154 | 13 | D |
| 1154 ÷ 16 | 72 | 2 | 2 |
| 72 ÷ 16 | 4 | 8 | 8 |
| 4 ÷ 16 | 0 | 4 | 4 |
А вот и полученное число:
0x482D74C84F
Напишу данный алгоритм на Python:
key = 11515195063862318899931685488813747395775516287289682636499965282714637259206269
flag = []
while key > 0:
n = key % 256
flag.append(chr(n))
key //= 256
flag = flag[::-1]
print(''.join(flag))
А вот и ответ:
crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}
В Python процесс можно сделать сильно проще. Так как в нем есть поддержка больших чисел, то мы просто можем вызвать стандартную функцию hex(), а дальше процесс вам известен:
key = 11515195063862318899931685488813747395775516287289682636499965282714637259206269
key = hex(key)[2:]
flag = []
for i in range(0, len(key), 2):
flag.append(chr(int(key[i:i+2], 16)))
print(''.join(flag))