main.py
xxxxxxxxxx
from hashlib import sha256
flag = open("flag.txt", "rb").read()
for byte in flag:
print(sha256(bytes([byte])).hexdigest())
output.txt
xxxxxxxxxx
df7e70e5021544f4834bbee64a9e3789febc4be81470df629cad6ddb03320a5c
86be9a55762d316a3026c2836d044f5fc76e34da10e1b45feee5f18be7edb177
8de0b3c47f112c59745f717a626932264c422a7563954872e237b223af4ad643
<...>
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
xxxxxxxxxx
from 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)
xxxxxxxxxx
BKSEC{s0meWh3r3-0v3r-th3-r@1nb0W-tAb13}