Zn = Zmod(26) key = [ [16,25,8], [14,19,5], [15,17,3], ] invkey = matrix(Zn, key)^-1 plaintext = b"rtca{vbuhp_kaiq_gfj_nx_rda_ujw}" plaintext = [x - ord('a') for x in plaintext if ord('a') <= x <= ord('z')] print(plaintext) flag = b"" for i in range(0, len(plaintext), 3): c = vector(Zn, plaintext[i:i+3]) m = invkey*c flag += bytes([int(x) + ord('a') for x in m]) print(flag)