暴力破解(英语:Brute-force attack),简称暴破,又称为穷举攻击(英语:Exhaustive attack),是一种密码分析的方法,即将密码进行逐个推算直到找出真正的密码为止。例如:一个已知是四位数并且全部由阿拉伯数字组成的密码,其可能共有10000种组合,因此最多尝试9999次就能找到正确的密码。
理论上除了具有完善保密性的密码以外,利用这种方法可以破解任何一种密码,问题只在于如何缩短试误时间。
尝试暴力破解
昨晚从网上下载了一个RAR的压缩文件,解压缩发现需要密码。去到原网站找线索,原来站长收费才能给密码,而且收费不低。
MD,你要收费提前说啊,害我浪费时间下载。这就像水浒传里的土匪一样,把你载到湖心才问你要钱要命。
当下心想,坚决不付费,还要把密码破解了,把内容分享给大家。
于是在github找到一个基于python+unrar.exe的项目:mnismt/CompressedCrack: Crack password .rar and .zip file with Python
简单浏览了代码及使用方法,设置了从5位密码~8位密码开始破解,执行,速度还行,每秒几十次的破解速度。
睡觉前还细心的关闭了电脑休眠,心想着睡醒之后,应该能从5位跳到6位。
时间分析
第二天睡醒,代码已经执行了10个小时,但是5位的密码一半都没有解完。瞬间,头秃的我感觉头上更凉了。
查看了一下代码,发现是基于94个字符串:
CHARACTER = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\\:;\"'<>,.?/"
这94个字符串覆盖了26个字母大小写、0~9数字及合法的密码标点符号。
1
基于这94个字符,5位的密码需要计算 94^5次,假设每秒能够计算10000次:
94 ** 5 / 10000 / 3600 / 24
8.494259518518518
需要8.5天才能破解。
2
如果密码为8位,每秒运算10000次,时间将以万年计:
94 ** 8 / 10000 / 3600 / 24 / 365
19329.304240901878
需要1.9万年。
3
如果只基于0~9这10个数字,密码为8位,每秒运算10000次,时间将为2.8小时:
10 ** 8 / 10000 / 3600
2.7777777777777777
我觉得我可以先试试纯数字,毕竟2小时还是等得起,前提是你的机器能每秒运算10000万次。
结论
最后我发现,原来RAR压缩文件支持中文字符做密码,那暴力破解难度就更大了。
暴力破解的机器成本、时间成本都很高,根本是mission impossible,没事别尝试。
参考资料