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

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%。

猜你喜欢

转载自blog.csdn.net/Onlyone_1314/article/details/108911911