main.pyxxxxxxxxxxfrom hashlib import sha256flag = open("flag.txt", "rb").read()for byte in flag: print(sha256(bytes([byte])).hexdigest())output.txtxxxxxxxxxxdf7e70e5021544f4834bbee64a9e3789febc4be81470df629cad6ddb03320a5c86be9a55762d316a3026c2836d044f5fc76e34da10e1b45feee5f18be7edb1778de0b3c47f112c59745f717a626932264c422a7563954872e237b223af4ad643<...>
Mặc dù sha256 không thể dịch ngược trở lại được, tuy nhiên là thay vì hash cả đống data cùng 1 lúc thì bài này mình lại đi hash từng byte ;))
1 byte thì chỉ có 8 bit nên giá trị của nó chỉ rơi vào khoảng từ 0-255 mà thôi. Mà đặc trưng của hàm hash đó là khi mình hash 2 cái input giống nhau thì kết quả cũng y chang như vậy.
Nên chúng ta có thể tạo ra 1 cái bảng lưu các giá trị của sha256 khi input đi từ 0-255 và đối chiếu với file output.txt để ra đáp án thôi ;3
xxxxxxxxxxfrom hashlib import sha256
hashes = open("output.txt", "r").read().split('\n')[:-1]output = b''
hashtbl = {}for byte in range(256): hashtbl[sha256(bytes([byte])).hexdigest()] = byte
for _hash in hashes: output += bytes([hashtbl[_hash]])print(output)xxxxxxxxxxBKSEC{s0meWh3r3-0v3r-th3-r@1nb0W-tAb13}