Bytes and Big Integers
Desc
Sistem kriptografi seperti RSA bekerja dengan operasi matematika pada bilangan besar, sementara pesan manusia biasanya berbentuk teks. Karena itu, pesan perlu dikonversi menjadi angka sebelum bisa diproses oleh algoritma kriptografi.
Cara umumnya adalah mengubah teks menjadi bytes, membaca bytes tersebut sebagai hex, lalu menginterpretasikannya sebagai integer besar. Proses sebaliknya bisa mengubah integer besar kembali menjadi bytes dan teks.
Sebagai ilustrasi:
pesan: HELLO
byte ASCII: [72, 69, 76, 76, 79]
byte heksadesimal: [0x48, 0x45, 0x4c, 0x4c, 0x4f]
basis-16: 0x48454c4c4f
basis-10: 310400273487Library PyCryptodome menyediakan
bytes_to_long()untuk mengubah bytes menjadi integer danlong_to_bytes()untuk mengubah integer kembali menjadi bytes.
Pada challenge ini, kita diberi integer besar dan diminta mengubahnya kembali menjadi pesan.
11515195063862318899931685488813747395775516287289682636499965282714637259206269Solution
With Python
from Crypto.Util.number import long_to_bytes
n = 11515195063862318899931685488813747395775516287289682636499965282714637259206269
print(long_to_bytes(n).decode())
# crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}long_to_bytes(n) membaca integer besar sebagai representasi bytes. Karena bytes tersebut sebenarnya berisi teks flag, .decode() dipakai untuk mengubahnya menjadi string.
With CyberChef
Buka CyberChef.
Gunakan recipe berikut:
- Text-Integer Conversion('String')
Atau gunakan:
-
To Base(16)
-
From Hex('None')
Summary
Challenge ini menunjukkan cara teks direpresentasikan sebagai bilangan besar. Konsep ini penting di kriptografi modern, terutama RSA, karena enkripsi dan dekripsi bekerja pada integer. Di Python, long_to_bytes() dipakai untuk decode integer besar kembali menjadi bytes.
Flag
crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}