Files
CariddiCTF/challs/cryptoEasy/challenge.py

63 lines
1.6 KiB
Python

#!/usr/bin/env python3
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import os
def factorial(x):
prod = 1
for i in range (1,x+1):
prod = prod * i
return prod
a = 3
b = 8
p = 159043501668831001976189741401919059600158436023339250375247150721773143712698491956718970846959154624950002991005143073475212844582380943612898306056733646147380223572684106846684017427300415826606628398091756029258247836173822579694289151452726958472153473864316673552015163436466970719494284188245853583109
g = factorial(p-1)
flag = "flag{...}"
def getDHkey():
A = pow(g,a,p)
B = pow(g,b,p)
K = pow(B,a,p)
return K
def handle():
keyExchanged = str(getDHkey())
encryptedFlag = encrypt(flag.encode("utf-8"),keyExchanged)
print("Il messaggio crittografato è: {0}".format(encryptedFlag.hex()))
return
def fakePadding(k):
if (len(k) > 16):
raise ValueError('La tua chiave è più lunga di 16 byte')
else:
if len(k) == 16:
return k
else:
missingBytes = 16 - len(k)
for i in range(missingBytes):
k = ''.join([k,"0"])
return k
def encrypt(f,k):
key = bytes(fakePadding(k),"utf-8")
cipher = AES.new(key, AES.MODE_ECB)
encryptedFlag = cipher.encrypt(pad(f, AES.block_size))
return encryptedFlag
def decrypt(f, k):
key = fakePadding(str(k))
chiave = bytes(key, "utf-8")
cipher = AES.new(chiave, AES.MODE_ECB)
decryptedFlag = cipher.decrypt(f)
return decryptedFlag
if __name__ == "__main__":
handle()