我以前问过这个问题一次,没有得到我想要的答案,但我找到了另一种方法。所以我又来了。
(前一个发现的答案的问题是,它非常有效,有点太高效了。我无法计算比较,我希望它是找到密码的最基本的方法,这样我就可以实现一个评分系统。)
我想做一个密码评级程序,根据时间长短对密码进行评级,并对程序进行比较,以便找到正确的密码。
我希望使用多种不同的方法来破解输入,例如:将输入与普通单词数据库进行比较,并从第一个字符开始生成密码的所有可能性。
问题:
我找不到从列表中的一个元素开始的方法,我们将它称为A。
运行A通过chr(32) - chr(127) ('space' - '~'),然后向名为B的列表中添加第二个元素。
对于第二个循环,set A = chr(32)和B将通过chr(32) - chr(127)运行。然后,A将转换为chr(33),B将运行所有字符,等等。在对所有可能的选项进行比较之前,在下一个循环中,它将向列表中添加另一个元素,并继续搜索,从chr(32)、chr(32)、chr(32-127)开始。继续此模式,直到找到正确的密码。
这是我最近能找到的有用的东西(我知道这很糟糕)。
while ''.join(passCheck) != ''.join(usrPassword) :
for i in range(0, len(usrPassword)) :
if ''.join(passCheck) != ''.join(usrPassword) :
passCheck.append(' ')
for j in range(32, 127) :
if ''.join(passCheck) != ''.join(usrPassword) :
passCheck[i] = chr(j)
for k in range(0, len(passCheck)) :
for l in range(32, 127) :
if ''.join(passCheck) != ''.join(usrPassword) :
passCheck[k] = chr(l)
print(passCheck)发布于 2019-12-03 02:59:42
这个问题的答案是,不幸的是,你可能想问另一个问题。
检查密码强度并不像计算所有可能的组合、Shannon熵等那么简单。
重要的是所谓的“猜测熵”,它是原始蛮力熵、已知密码列表和密码泄漏列表、适用于这些列表的规则、与这些列表中元素的距离、人工生成的字符串和短语、键盘行走等极其复杂的组合。
此外,密码强度深深植根于“这个密码是如何产生的?”这个问题。这是非常困难的,事实上,自动检测和计算后的事实。作为人类,在许多情况下,我们可以通过逆向工程来近似于这一点,即人们如何选择密码的心理.但这仍然是一门艺术,而不是一门科学。
例如,“itsmypartyandillcryifiwantto”是一个糟糕的密码,尽管它的Shannon熵相当大。“WYuNLDcp0yhsZXvstXko”是随机生成的密码.但既然这是公开的,那就不太好了。直到你知道像“qscwdvefbrgn”或“ji32k7au4a83”这样的密码是如何生成的,它们看起来很强大.但他们绝对不是。
所以,如果你用严格的答案回答你的问题,你可能会得到一个工具,它大大高估了许多密码的强度。如果您的目标实际上是鼓励用户创建抵抗暴力的密码,那么您应该鼓励他们使用随机生成的密码,并确保您的密码使用非常慢的散列(Argon2系列、scrypt、bcrypt等)--但是在选择一个密码之前,请确保为UX和服务器性能准备这些密码。
参考资料和进一步阅读(免责声明:有些是我的答案或有我的评论):
发布于 2019-12-02 17:02:02
如果您按字母顺序签入,那么只需要一个循环就可以计算出它需要检查多少次。
你有96个字符(127-32+1)
password = 'ABC'
rate = 0
for char in password:
rate = rate*96 + (ord(char)-31)
print(rate)https://stackoverflow.com/questions/59142980
复制相似问题