encrypted = [405, 35, 133, 371, 435, 279] # Directly from demo output of encrypted p = 29 q = 17 n = p*q tot = (p-1)*(q-1) e = 3 # Calculate d such that ed == 1 mod tot d = 1 # Guess while (e*d % tot != 1): d += 1 # Algorithm is currently extremely dumb def decrypt_block(blk): return blk**d % n decrypted = [decrypt_block(block) for block in encrypted] messagenum = 0 for block in decrypted: messagenum += block messagenum *= n message = '' while messagenum > 0: message += chr(messagenum%128) messagenum = (messagenum-messagenum%128)//128 print(message)