Files
ctf/2025/cscg/crypto/intro3/main.py
2025-11-28 12:23:07 +01:00

29 lines
667 B
Python

import os
BITS = 56
FLAG = os.getenv("FLAG", "CSCG{sH4r1nG_1nt3rn4l_sT4te_1s_d3adLy}")
A = int.from_bytes(os.urandom(BITS//8), "little")
B = int.from_bytes(os.urandom(BITS//8), "little")
SEED = int.from_bytes(os.urandom(BITS//8), "little")
def rng(x, size):
return (x*A+B) & ((2**size)-1)
def gen_random(seed, bits, mask):
state = seed
while True:
state = rng(state, bits)
yield state & mask
def main():
print("Here are some random numbers, now guess the flag")
rng = gen_random(SEED, BITS, 0xFF)
for i in range(len(FLAG)):
num = next(rng)
print(num ^ ord(FLAG[i]))
if __name__ == "__main__":
main()