有一个不错的网站http://www.howsecureismypassword.net/,它决定了破解密码需要多长时间。
我想要的是实现这样的功能,所以我需要一个算法
有一个不错的网站http://www.howsecureismypassword.net/,它决定了破解密码需要多长时间。
我想要的是实现这样的功能,所以我需要一个算法
了解常见的密码攻击向量将使您了解如何进行计算。当我们需要一个数字时,假设一台台式计算机每秒可以检查 40 亿 (4x10 9 ) 个密码,这似乎是正确的。
重要的是要意识到攻击者很少尝试仅破解您的密码。相反,他们将拥有大量帐户的用户 ID,并且他们希望尝试破解尽可能多的用户 ID。因此,他们将大部分时间花在破解简单密码上,而不是为难密码所困扰是值得的。
尝试输入用户 ID 作为密码。令人惊讶的是有多少人这样做。您的密码可以瞬间破解。
这很简单。攻击者只需要保留(例如)10 6 个最常用密码的列表,并检查每个密码一次。这可以在一秒钟内完成。如果您的密码在最常见的密码列表中,那么它可能几乎可以瞬间被破解。
如果您的密码不在字典中,那么另一种选择是使用蛮力。使用此方法破解密码所需的时间取决于 (a) 密码的长度,以及 (b) 包含密码的符号集。一般公式是
timeTaken = (sizeOfSymbolSet ^ passwordLength) / (4*10^9) # (seconds)
例如,如果您的密码仅由小写字母组成,则符号集的大小为 26。下面列出了破解密码可能需要多长时间作为其长度的函数:
Length Time
4 0.1 millisecs
6 0.1 seconds
8 1 minute
10 10 hours
12 9 months
如果您使用所有小写和大写字母、数字和符号,则符号集更接近 100。破解密码所需的时间相应更长:
Length Time
4 25 millisecs
6 4 minutes
8 28 days
10 800 years
12 8 million years
不过,不要太自满!800 万年的数字假设您随机选择 12 个字母、数字和符号作为密码,即您的密码类似于
t8Qkx#rxZAM@
%Kuc;p8WHmFU
xDE!XE$rLGh4
KJdx2K8BS33K
HTaeCc&t46L;
有多少人有这样的密码?
这依赖于独创性和蛮力的结合。它是前两种方法的混合,依赖于常见的“密码约定”而不是常见的密码。
例如,许多人具有“字典单词后跟数字”形式的密码。牛津英语词典大约有 2x10 5 个单词,因此要生成“字典单词后跟数字”的所有组合,大约是 200 万个不同的密码,可以在一秒钟内再次轻松签入。
其他常见的比喻包括用看起来相似的符号替换字符 - o
with 0
,l
with 1
,a
with@
等。一旦你有一个字典单词列表,生成所有这些替换是微不足道的。猜测一下,您可能会将列表的长度增加 1000 倍,这仍然可以在一秒钟内检查。
我的猜测是,该网站使用了部分或全部这些方法的组合来计算破解密码需要多长时间。
好吧,你永远不知道:这是今天发布的:
检查全部在 javascript 中完成。代码在 github 上可用
从它的工作原理页面我得到的印象是作者知道他在说什么。(您会想阅读它,他编写javascript 实现的方式本身就很有趣)
也许您可以借用一些见解,甚至是代码(欢迎分叉,我没有看到超出版权声明的许可)。
不,因为它取决于密码上使用的散列。但是,运行快速字典攻击、检查长度、大小写字母、数字和符号以及它们的常用组合(例如“123”)可以让您对密码的强度有所了解。