Cryptography
One Byte XOR
diberikan file ZIP berisi source code python encryptor dan hasil enkripsinya berikut adalah scriptnya
from Crypto import Random
import base64
def main():
flag = open("flag.txt","rb").read()
key = Random.new().read(1)
res = ""
for i in range(len(flag)):
res += chr(ord(flag[i]) ^ ord(key))
res = base64.b64encode(res)
open("encrypted","wb").write(res)
if __name__ == "__main__":
main()
|
Fungsi enkirptor diatas adalah meng-XOR setiap character dengan 1 byte key random, lalu hasilnya di encode ke base64. Untuk menyelesaikan challenge ini, penulis menggunakan Brute Force untuk angka dari 0 sampai 256
berikut adalah script solvernya
from Crypto import Random
import base64
flag = open("flag.txt","rb").read()
flag = base64.b64decode(flag)
def xorString(string,key):
res = ""
for i in range(len(string)):
res += chr(ord(flag[i]) ^ key)
return res
for j in range(0,256):
resu = xorString(flag,j)
if "HackFest" in resu:
print j,resu
|
Setelah di run maka di dapatkan output :
Selamat, ini flagnya : HackFest{ketika_ragu_dan_galau_brute_force_aja}
Flag: HackFest{ketika_ragu_dan_galau_brute_force_aja}
Cryptizi
Diberikan file zip berisi source code python berupa enkriptor, berikut adalah Scriptnya
def main():
print("#[][][]ENKRIPTOR mini " )
x = raw_input("\n\ntYPE : \n")
x = duniasakti(x)
print("\n\n {}RESULT :\n" + x)
return 0
def duniasakti(yy):
x = list(yy)
a = len(x) - 1
n = a/2
for i in range(n,a+1):
temp = x[a-i]
x[a-i] = x[i]
x[i] = temp
a = a + 1
v = a * 3
for h in range(a):
temp = x[h]
for j in range(256):
karakter = chr(j)
if(karakter==temp):
x[h] = str(j*v)
break
continue
x = "Un%".join(x)
x = list(x)
z = list()
yuyu = ['1','2','3','4']
kangkang = ['!*','x','_','q']
for i in x:
c = i in yuyu
if(c == True):
i = kangkang[yuyu.index(i)]
z.append(i)
z = ''.join(z)
return(z)
if __name__ == '__main__':
main()
|
enkripsi ini merubah text asli (Plain text) menjadi list dan merubahnya dengan sebuah inyeger lalu di gabung dengan "Un5%" dan merubah angka menjadi !*,x,_,q secara berurutan, berikut adalah solvernya
cipher = open("xxcheap.enc","rb").read()
cipher = cipher.replace("!*","1")
cipher = cipher.replace("x","2")
cipher = cipher.replace("_","3")
cipher = cipher.replace("q","4")
cipher = cipher.replace("Un%"," ")
print cipher
a = 33
v = a * 3
x = [12375, 10395, 11484, 11286, 9999, 10197, 10890, 9999, 10791, 10395, 9900, 9405, 11484, 10395, 10692, 11583, 11385, 9405, 9603, 10395, 11385, 11583, 10890, 9603, 10791, 9405, 10197, 10890, 9603, 9900, 9603, 10593, 12177]
t = ""
print v
for i in range(33):
h = x[i]
y = h/v
t += chr(y)
print(t[::-1])
|
maka akan keluar output
12375 10395 11484 11286 9999 10197 10890 9999 10791 10395 9900 9405 11484 10395 10692 11583 11385 9405 9603 10395 11385 11583 10890 9603 10791 9405 10197 10890 9603 9900 9603 10593 12177
99
{kadang_manusia_sulit_dimengerti}
|
Flag : HackFest{kadang_manusia_sulit_dimengerti}
AES Machine
diberikan sebuah koneksi netcat dengan alamat nc ccug.gunafarma.ac.id 6008 jika di jalankan maka akan keluar :
┌─[fallcrescent@parrot]─[~]
└──╼ $nc ccug.gunadarma.ac.id 6008
_ ___ ___ __ __ _ _
/_\ | __/ __| | \/ |__ _ __| |_ (_)_ _ ___
/ _ \| _| \__ \ | |\/| / _` / _| ' \ | | ' \/ -_)
/_/ \_\___|___/ |_| |_ \__,_\__|_||_|_|_||_\___| v1.0
Options : encrypt, decrypt, getflag, quit
[!] NOTE : You only have 3 times to encrypt your plaintext or flag
>>
|
dan jika di masukkan getflah akan di dapatkan flag yang terenkripsi seperti berikut:
[+] Ciphertext : b5X77CB4DqBfWtrHHF14GySO/BctWdJKkmIp5f7opxJi6HcQTL37vteKjFyn2ReXxLjq2gh6iwwNTyLSXKpSWA==
|
diberikan juga source code untuk menencryptnya, berikut adalah script encrpyptornya
import sys
from base64 import b64encode
from base64 import b64decode
from Crypto.Cipher import AES
from Crypto import Random
import hashlib
BLOCK_SIZE = 16
IV = hashlib.md5(Random.new().read(32)).digest()
key = hashlib.sha256(Random.new().read(64)).digest()
def pad(s):
return s + Random.new().read(BLOCK_SIZE - (len(s) % 16))
def encrypt(msg):
msg = pad(msg)
cipher = AES.new(key,AES.MODE_OFB,IV)
return b64encode(cipher.encrypt(msg))
def _unpad(s):
return s[:-ord(s[len(s)-1:])]
def getflag():
flag = open("flag.txt","rb").read()
return encrypt(flag)
def print_(s):
sys.stdout.write(s)
sys.stdout.flush()
def println(s):
print_(s+"\n")
def welcome():
print_(""" _ ___ ___ __ __ _ _
/_\ | __/ __| | \/ |__ _ __| |_ (_)_ _ ___
/ _ \| _|\__ \ | |\/| / _` / _| ' \| | ' \/ -_)
/_/ \_\___|___/ |_| |_\__,_\__|_||_|_|_||_\___| v1.0
""")
def main():
num = 1
welcome()
println("")
println("Options : encrypt, decrypt, getflag, quit")
println("[!] NOTE : You only have 3 times to encrypt your plaintext or flag")
while True:
try:
print_(">> ")
pil = raw_input()
if pil == "encrypt":
if num > 3:
println("[!] You have use this more than 3 times")
break
print_("[?] Plaintext : ")
plain = raw_input()
println("[+] Ciphertext : " + encrypt(plain))
num += 1
elif pil == "decrypt":
print_("[?] Plaintext : ")
plain = raw_input()
println("[+] Flag : " + decrypt(plain))
num += 1
elif pil == "getflag":
if num > 3:
println("[!] You have use this more than 3 times")
break
println("[+] Ciphertext : " + getflag())
num += 1
elif pil == "quit":
println("[+] Exiting Program ")
break
else:
println("[-] Invalid option ")
break
except:
break
if __name__ == "__main__":
main()
|
dari source code diatas bisa disimpulkan bahwa IV dan key akan di buat random srtiap di jalankan jenis AESnya yang digunakan adalah OFB dan diencrypt menjadi base 64
untuk menyelesaikan soal ini dapat menggunakan cara menXOR kan plaintextnya lalu akan di dapatkan key yang akan di XOR untuk mendapatkan Flag.
dapat diambil contoh dari service yang di jalankan sbb:
>> encrypt
[?] Plaintext : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[+] Ciphertext : ZrXZxidcPJVlKq+zOH0LaQT6iW8IfaY44xJZlY2Z0zAXkAJobsuDmvT6rn/RqDDisYShfbYVzTVGkjGLSbsZWA==
|
script solver
import base64
flag = "b5X77CB4DqBfWtrHHF14GySO/BctWdJKkmIp5f7opxJi6HcQTL37vteKjFyn2ReXxLjq2gh6iwwNTyLSXKpSWA=="
flag = base64.b64decode(flag)
plain = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
cipher = "ZrXZxidcPJVlKq+zOH0LaQT6iW8IfaY44xJZlY2Z0zAXkAJobsuDmvT6rn/RqDDisYShfbYVzTVGkjGLSbsZWA=="
def xorString(string,key):
res = ""
for i in range(len(string)):
res += chr(ord(string[i]) ^ ord(key[i]))
return res.encode("hex")
key = xorString(plain,cipher)
print xorString(flag,key)
|
setelah di run maka di dapatkan flag
Flag : HackFest{145ea23a549de530111205c4949c79eb1cb70f44}
MultiByte Xor
Diberikan file zip berisi Source Code Python, beserta hasil enkripsinya berikut adalah source codenya :
def main():
key = open("key.txt","rb").read().strip()
message = open("message.txt","rb").read().strip()
assert(len(key) == 12)
assert('HackFest' in message)
assert(key.isalnum() == True)
message_enc = ""
for x in range(len(message)):
message_enc += chr(ord(message[x]) ^ ord(key[x % len(key)]))
open("message.txt.encrypted","wb").write(message_enc)
if __name__ == "__main__":
main()
|
Berikut Hasil dari enkripsi yang di jalankan
*I<Q;3' I/N+;[ 7:I{
^QGxc.+(N.1? &.N,D* i9(<7$*U/
9+39k
9@.&"kI:Q='i
9N+;[ 7:Gk&
?Q&r*?
9,:(. I1^&~i
*?Uo;'I/;Q!5i*N+U=&(N!*%+Do?,#
I:U;'%N
*
9^.r"
|
untuk menyelesaikan challenge ini penulis menggunakan Known Plain Attack dapat menggunakan tools yang ada di internet, untuk toolsnya bisa di lihat disini. dan ketika dijalankan maka akan menampilkan :
┌─[fallcrescent@parrot]─[~/Hackfest/Crypto/Multibyte_XOR_Source]
└──╼ $ ./KPA.py message.txt.encrypted 'HackFest' 12
Searching XOR-encrypted message.txt.encrypted for string 'HackFest' (max_key_length = 12)
Key length: 12
Partial Key: In����ciX0OR
Plaintext: Se����t datang����HackFest����2. Saya ����gai prob����setter b����rap semo����nda dapa����ndapatka����l baru d����HackFest����bagai co����nya chal����e ini, c����enge ini����ancang a����peserta ����Fest mem����i betul ����imana kr����grafi XO����rkerja d����enyerang����dengan m����unakan K���� Plainte����ttack.
D����ni dia f����yang bis����da submi����HackFest����wn_plain����_attack_����e2f67cdf����4ddc8e09����4cd7}
Key length: 12
Partial Key: In����ciX0OR
Plaintext: Se����t datang����HackFest����2. Saya ����gai prob����setter b����rap semo����nda dapa����ndapatka����l baru d����HackFest����bagai co����nya chal����e ini, c����enge ini����ancang a����peserta ����Fest mem����i betul ����imana kr����grafi XO����rkerja d����enyerang����dengan m����unakan K���� Plainte����ttack.
D����ni dia f����yang bis����da submi����HackFest����wn_plain����_attack_����e2f67cdf����4ddc8e09����4cd7}
Key length: 12
Partial Key: ��iKunciX0��
Plaintext: ��lamat da���� di Hack���� 0x02. S����sebagai ����lem sett����erharap ����ga Anda ����t mendap����n hal ba����ari Hack����. Sebaga����ntohnya ����lenge in����hallenge���� diranca����gar pese����HackFest����ahami be����bagaiman����iptograf����R berker����an menye����nya deng����enggunak����nown Pla����xt Attac����an ini d����lag yang����a Anda s����t : Hack����{known_p����text_att����9276e2f6����a9b94ddc����fb2d4cd7�
Key length: 12
Partial Key: In����ciX0OR
Plaintext: Se����t datang����HackFest����2. Saya ����gai prob����setter b����rap semo����nda dapa����ndapatka����l baru d����HackFest����bagai co����nya chal����e ini, c����enge ini����ancang a����peserta ����Fest mem����i betul ����imana kr����grafi XO����rkerja d����enyerang����dengan m����unakan K���� Plainte����ttack.
D����ni dia f����yang bis����da submi����HackFest����wn_plain����_attack_����e2f67cdf����4ddc8e09����4cd7}
|
Didapat key = IniKunciX0OR
┌─[fallcrescent@parrot]─[~/Hackfest/Crypto/Multibyte_XOR_Source]
└──╼ $ ./KPA.py message.txt.encrypted --key=IniKunciX0OR
Key length: 12
Partial Key: IniKunciX0OR
Plaintext: Selamat datang di HackFest 0x02. Saya sebagai problem setter berharap semoga Anda dapat mendapatkan hal baru dari HackFest. Sebagai contohnya challenge ini, challenge ini dirancang agar peserta HackFest memahami betul bagaimana kriptografi XOR berkerja dan menyerangnya dengan menggunakan Known Plaintext Attack.
Dan ini dia flag yang bisa Anda submit : HackFest{known_plaintext_attack_9276e2f67cdfa9b94ddc8e09fb2d4cd7}
|
Flag : HackFest{known_plaintext_attack_9276e2f67cdfa9b94ddc8e09fb2d4cd7}
Kindergarten Encryption
Diberikan Script Encrpytor dan emkripsi seperti berikut :
import string
import random
import sys
character = string.digits + string.lowercase + string.uppercase + string.punctuation
BLOCK_SIZE = 8
key = random.randint(2**4,len(character))
def pad(s):
res = s
while len(res) % BLOCK_SIZE != 0:
res += " "
return res
def encrypt(s):
p = pad(s)
c = ""
mx = []
mx_t = []
for x in range(len(p)):
if p[x] not in character:
c += p[x]
else:
pos = (character.index(p[x]) + key) % len(character)
c += character[pos]
for x in range(0,len(c),BLOCK_SIZE):
mx.append(c[x:x+BLOCK_SIZE])
for i in range(BLOCK_SIZE):
tmp = ""
for j in range(len(mx)):
tmp += mx[j][i]
mx_t.append(tmp)
return ''.join(mx_t)[::-1]
def main():
if len(sys.argv) == 2:
f = sys.argv[1]
cip = open(f,"rb").read()
cip = encrypt(cip)
open(f+".enc","wb").write(cip)
else:
exit()
if __name__ == "__main__":
main()
|
bisa disimpulkan enkripsi tersebut merupakan implementasi dari kriptografi caesar dan column transposition cipher, berikut solvernya :
import string
BLOCK_SIZE = 8
message = open("message.txt.enc","rb").read()
message = message[::-1]
character = string.digits + string.lowercase + string.uppercase + string.punctuation
def test(key):
mx_t = []
ka = len(message)
ma = ka/BLOCK_SIZE
for i in range(0,len(message),ma):
mx_t.append(message[i:i+ma])
mx = ""
for i in range(0,len(mx_t[0])):
for j in range(0,len(mx_t)):
mx += (mx_t[j][i])
c = ""
for x in range(len(mx)):
if mx[x] not in character:
c+= mx[x]
else:
pos = (character.index(mx[x]) - key ) % len(character)
c += character[pos]
return c
for key in range(2**4,len(character)):
c = test(key)
if "HackFest" in c:
print "key:",key
print "plain:\n",c
break
|
Output yang di dapat :
key: 16
plain:
IKLAN UNIVERSITAS GUNADARMA
Universitas Gunadarma
Membangun Insan Cerdas Berkompetitif dan Berkarakter
Universitas Gunadarma
Bersama UG masa depan diraih saat ini
HackFest{orang_pintar_kalah_sama_orang_sabar_tekun_dan_rajin}
MARS UNIVERSITAS GUNADARMA
Majulah Gunadarma
Majulah Putra Indonesia
Tuntut Ilmu Bersemangat Baja Tuk Mengemban Tugas Mulia
Majulah Gunadarma
Majulah Putra Indonesia
Kibarkan Panji Panji Cita
Tonggak Membangun Negara
Hiduplah Gunadarma
Hidup Siswa Pendidiknya
Mengabdi Pada Negara Bangsa Nan Jaya
|
Flag: HackFest{orang_pintar_kalah_sama_orang_sabar_tekun_dan_rajin}
Classic Crypto Machine
diberikan service netcat yang beralamatkan nc ccug.gunadarma.ac.id 6003 yang ketika di run maka akan tampil :
--------------------------------------------
Random Classic Crypto Machine
--------------------------------------------
Option : encrypt, decrypt, getflag, exit
>> getflag
[+] Result : DJgqTxk5GqxsqH{xiUPxUo+5s}xr+5x+Ta+xi+5UaKjuU5j+
|
penulis mencoba untuk input setiap huruf uppercase, lowercase, dan numerik untuk mengetahui apa saja yang akan di rubah
Asli = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}"
Cipher = "aHDsq5YVS3kneRmfIZGPW189lC06NdXgcuME2A7FtbpywzO4QLvhUrTiJKjBxo{}"
|
lalu penulis mencoba encrpyt pesan seperti berikut :
>> encrypt
[?] Message : HackFest{123456ABCDEGIJKLMOPQRSTUVWXYZ789}
[+] Result : D2gcv0kyGEBMqz{Ao7PhTt+bi}Jp+4K+jw+LN+6OaxXudQr+
|
lalu penulis menyusun script sbb untuk solvernya :
from string import maketrans
#raw = "HackFest{123456ABCDEGIJKLMOPQRSTUVWXYZ789}"
#raw = "D2gcv0kyGEBMqz{Ao7PhTt+bi}Jp+4K+jw+LN+6OaxXudQr+"
raw = "DJgqTxk5GqxsqH{xiUPxUo+5s}xr+5x+Ta+xi+5UaKjuU5j+"
raw = raw.replace("+","")
asli = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}"
cipher = "aHDsq5YVS3kneRmfIZGPW189lC06NdXgcuME2A7FtbpywzO4QLvhUrTiJKjBxo{}"
transtbl = maketrans(cipher,asli)
plain = raw.translate(transtbl)
print plain
t = "cKFGYAkRsJ7IeT{L9MtZ2OP3}4QV56SXCBUa8EHDW1"
h = "HackFest{123456ABCDEGIJKLMOPQRSTUVWXYZ789}"
result = ""
for i in range(len(h)):
pos = t.find(h[i])
result += plain[pos]
print result
|
flag : HackFest{60d8828f306ede4809f1fab0ff828853}
Baby RSA
Diberikan sebuah service nc ccug.gunadarma.ac.id 6004 yang ketika dibuka akan melakukan
----- Basic RSA HackFest 0x02 -----
[+] Level 1 : Temukan nilai n
p = 112929231839133764922499650211502042983992522246363389414474183288140649720837
q = 109099903505021106777266264281880454823285926834179667561051699220281661035493
n =
|
Dapat disimpulkan bahwa challenge ini akan memiliki beberapa level dengan soal yang berbeda beda. Untuk menyelesaikan level-level terdapat hint berupa link yang menunjukan halaman Wikipedia dengan itu penulis dapat mendapatkan untuk mencari nilai n dapat di lakukan n = pq maka dibuatlah script di python
>>> def soal1(p,q):
... n=p*q
... print(n)
... return;
...
>>> soal1(p,q)
12320568296545651007975344558539473699506190984476704529033056826916623164536349893268304478908382864342093065085644220702536014936470661634136750798667641
|
Lalu level 2
[+] Level 2 : Temukan nilai p
n = 10872329446459129667921644340962528388878929362939012297295288926876443586605345820094871187376734268471914144532889920441052111516485840345063304798849199
q = 97964102664819230216369526981268162507859658722305600628418624802857385115189
p =
|
Dapat menggunakan persamaan sebelumnya hanya ditukar posisi p = nq
>>> def soal2(n,q):
... p = n/q
... print(p)
... return;
...
>>> soal2(n,q)
110982790131385439183723482973777784066553128829290195687134540527228330203091
|
Level 3
[+] Level 3 : Temukan nilai m
pesan = aku pasti bisa jadi juara hackfest 0x02
m =
|
Untuk mendapatkan m dapat dilakukan pengubahan pesan menjadi hexadecimal
>>> def soal3(pesan):
... m = int(pesan.encode("hex"),16)
... print(m)
... return;
...
>>> pesan = "aku pasti bisa jadi juara hackfest 0x02"
>>> soal3(pesan)
3175160763199730136104003070276660270796333966900447388966212557680438006565173088752158388274
|
Level 4
[+] Level 4 : Temukan nilai phi(n)
n = 9206319279554238079698747425008417624874207283636875034394462687384683731832770440746049983145925424382008526538789703529606606309114020211552708433112187
q = 98392596907614538909695412992547731548149407230658364699581726812760734593153
phi(n) =
|
Untuk mendapatkan (n)dapat digunakan rumus (n) =(p-1)(q-1) maka untuk level 4
>>> def soal4(n,q):
... p = n/q
... phin = (p-1)*(q-1)
... print(phin)
... return;
...
>>> soal4(n,q)
9206319279554238079698747425008417624874207283636875034394462687384683731832578480954364508576426459271964149847992919399995028606507027058104941207936256
|
Level 5
[+] Level 5 : Temukan nilai d
n = 9853378978342277246592854301601474299315203685648314474324753473155118482252169802617906434483572961369844016154721468959046212604116497292113114162231737
p = 110033185946243101710239017871774914594735109397409265529182580549501277407929
e = 65537
d =
|
Untuk level 5, q nya tidak diketahui maka harus melakukan q = nplalu untuk (n) =(p-1)(q-1)dan d = modulo inverse e dan (n)maka dalam python di lakukan
>>> from libnum import invmod
>>> def soal5(n,p,e):
... q = n/p
... phin = (p-1)*(q-1)
... d = invmod(e, phin)
... print(d)
... return;
...
>>> soal5(n,p,e)
3440120304613419071353450711429319826092606856147200565894451748161531134968145179213649016515631007988591748561673347510075940851176671740951158297856001
|
Level 6
[+] Level 6 : Temukan nilai c
pesan = 6J4fGdqv2mER1pq0cYOTiYsDOpJjJgKRIVmA9d0DQtMPAZyr
n = 160530120449698853323914225889124288546202333785790888734659128737331626915319316700266511731408151927180987601275757530973277653384961677715161263674205308817194621469376259337292610388151469412735064526307603622141517435842801463275101483227977200587303919482938745312230648306154070691886591194934605433409
q = 13165879531906425940330381135111494537878458358222582656432653812513061043891386238791888923754391942196746222741546266017174542138733300161390873843866919
e = 65537
c =
|
Pada level 6 ini p tidak diketahui maka harus dilakukan p = nqdan pesan masih harus di ubah ke dalam hexadecimal dan untuk c = me % nmaka dalam python dapat dilakukan
>>> def soal6(m,n,q,e):
... p = n/q
... m = int(m.encode("hex"),16)
... c = pow(m,e,n)
... print(c)
... return;
...
>>> soal6(pesan,n,q,e)
100501547972271070798318369578645466989911616757748641372952916585423785490588909924189274460434149361552127069392971622473595503186907497335888977716049079304160335989197580325853248310829095991132035902793603908571011915641163207424630738539889500138614509900784220676722179766888454341208545415304372961547
|
Level 7
[+] Level 7 : Temukan nilai m
ciphertext in base64 = NBhrA55dSfY00kwWshL0e3WKcXYM6QqoDxt+cP2BCcwHPc7wNHTZ+L+89wyKw3TCXDgp8GpHLEAMvOPrJFZO6KaFoyHt8R46cCrwzFwx1x5C+miHhpUNVMcExnhG4M90VPq9EfEkCmHZJtXUfjbncXs5d7kBtT/8znjc9CdB9vw=
n = 105634545350227668733616554822704614788920475329747055385504294275239128530470142574808200030192609373682071201808841553172406658025654874765485132609987007425076979724142236031162853736147304603432629192223788297598717680324572795857452903934488917270781541310261931620206108863609139447378538166776891718573
q = 10057149911218765533626529011598670489153341897417383198981179878497158384644852029373336716203886373181491358314668788822752936362913099867066628093325287
e = 65537
m =
|
Untuk level 7 pesan nya telah di encode dengan base64 berarti harus di decode dahulu dan di encode lagi menjadi hexadecimal lalu p dan (n)sama seperti sebelumnya dengan m =md % n dengan d =modulo inverse e dan (n)lalu m adalah pesan yang telah di decode dan di encode menjadi hex. Dalam python
>>> import base64
>>> def soal7(c,n,q,e):
... tempc = base64.b64decode(c)
... tempc = int(tempc.encode("hex"),16)
... p = n/q
... phin = (p-1)*(q-1)
... d = invmod(e, phin)
... m = pow(tempc,d,n)
... print(m)
... return;
...
>>> soal7(pesan,n,q,e)
15920080425091568109598387832238350405708995466701118404360496515404108810595592823358106083566318505980095945388855
|
Level 8
[+] Level 8 : Temukan plaintext
ciphertext in base64 = X4eztVA+M9+dkuxSgS3e6JdLdbv9pFy1eWx0YuQyfCBS/8N9dvX9n+VZlEtCZDmqxfHW19TdO6tiHor34fhlWOmc0X8OyBF6ywIL6l9Z0fupNv+kPnoAS1LrQb/WPfq2YmT8tuE89Nm1erDI8tjsz9Cxq2BvW1geC/aH0l5xqvw=
n = 112159657044006086576915455759176679621763496017981700046200895529676073817474177034245292799763333996176042362769229641412420129561323219586574124980985619853051416733196196651657810439513884095626601902976547198664947223165325332365109374872968723598810114042756682864529920654837856721441582636538549146817
p = 10303880386138735355196665822024787118841643672219032647140881217742041465754554143032067331382589882001248527861118412427798577586084906701529625378686187
e = 65537
plaintext =
|
Level 8 sama seperti level 7 dalam pengerjaan hanya tinggal mengubah hasil m dari angka ke string
>>> from libnum import n2s
>>> def soal8(c,n,q,e):
... tempc = base64.b64decode(c)
... tempc = int(tempc.encode("hex"),16)
... p = n/q
... phin = (p-1)*(q-1)
... d = invmod(e, phin)
... m = pow(tempc,d,n)
... str = n2s(m)
... print(str)
... return;
...
>>> soal8(c,n,p,e)
FBaZgCWjZ7n0QxUqH5LUD8opOegltdBGThfGkw8VdOmxNYmU
|
Dan di dapatkan output
[+] Baik, sudah saatnya aku memberi kakak flag
[+] Ini flagnya kak : HackFest{basic_RSA_itu_pentiing_buangeet_lhoo_kak_hehe}
|
Flag : HackFest{basic_RSA_itu_pentiing_buangeet_lhoo_kak_hehe}
0 comments:
Post a Comment