不用密码解密压缩文件(CRC32算法)

    科技2022-07-11  137

    4.Rar file without password

    rar的压缩文档中是提供一个CRC32的值,这个值是文档在压缩之前的CRC32值,相信很多人都知道:每个不同的文件都有基本唯一的一个CRC32值。

    CRC全称为循环冗余校验(Cyclic Redundancy Check, CRC),用来校验文件是否出错但并不能用于自动纠错。这种爆破方式只适用于文本文件较小的情况下,如果很大,不如去爆破密码。基本上不同文件都有唯一的CRC32值,那么在文件内容较小的情况下就更不可能重复了。 因为txt文本中的内容较短,所以我们可以用暴力穷举文本内容,只要找到相同的CRC码,即找到正确的文本内容。 源代码:CRC32.py

    import binascii #import string #各种打印字符 #dic=string.printable dic=range(0,128) crc = 0x05665E74 # 记得要以0x开头 def CrackCrc(crc): for i in dic : for j in dic: for p in dic: s = str(chr(i)+chr(j)+chr(p)).encode("utf-8") #在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。 # 如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。 #if crc == (binascii.crc32(s) & 0xffffffff): if crc == binascii.crc32(s): #Python3中字符都为unicode编码,必须先转码utf-8 print(str(s,'utf-8')) print("CRC冲撞攻击解密的明文为:"+str(s,'utf-8')) CrackCrc(crc)

    实验结果截图:

    最后rate.rar中的rate.txt解密的明文为:77%。

    Processed: 0.009, SQL: 8