crc 32衝突ctf python
8080 ワード
ctfを習ったばかりでcrc 32の衝突の問題に出会った.直接コードをつける.
私は他の人が書いたコードを見て、彼らはすべてマルチスレッドをプラスしていません.pythonのマルチスレッドはまともなマルチスレッドではありませんが、このように書くと使いやすくなります(すべてのcrc 32チェックコードを一度に入力して、一度に計算します)一般的に、衝突のバイト数は5(通常は3または4バイト)を超えません.そうしないと衝突が長くなります.衝突時間が長すぎるとこの問題は面白くない.一般的に圧縮パッケージには多くのファイルがあり、各ファイルサイズは5バイト未満でcrc 32で衝突します.
import string
import threading
import binascii
import sys
def crc(_crc):
l = 1
dic = string.printable
_input = _crc
_input = "0X" + _input
for i in dic:
for n in dic:
for h in dic:
for m in dic:
s = i + n + h + m
s = s.encode()
# print(str(binascii.crc32(s)), _input)
if hex(binascii.crc32(s)).upper() == _input.upper():
print(_crc, ':', s.decode())
print(l)
sys.exit() # , , ,
l = l + 1
def crc32():
print(" !!!")
num = int(input(" , :"))
_thread = []
_args = []
print(" ")
for i in range(num):
print(i+1, end=':')
_args.append(input())
# print(_args)
for i in range(num):
t = threading.Thread(target=crc, args=(_args[i],))
_thread.append(t) # bug, , ,
# print(_thread)
for i in range(num):
_thread[i].start()
for i in range(num):
_thread[i].join()
input()
if __name__ == '__main__':
crc32()
私は他の人が書いたコードを見て、彼らはすべてマルチスレッドをプラスしていません.pythonのマルチスレッドはまともなマルチスレッドではありませんが、このように書くと使いやすくなります(すべてのcrc 32チェックコードを一度に入力して、一度に計算します)一般的に、衝突のバイト数は5(通常は3または4バイト)を超えません.そうしないと衝突が長くなります.衝突時間が長すぎるとこの問題は面白くない.一般的に圧縮パッケージには多くのファイルがあり、各ファイルサイズは5バイト未満でcrc 32で衝突します.