【发布时间】:2016-03-04 16:56:59
【问题描述】:
我正在编写一个程序来评估密码的强度。我的程序中的一个函数获取输入的密码,并将其与大量单词和密码列表进行比较。
这段代码是一个二进制搜索,查看输入的密码是否在密码列表中。
with io.open('PasswordList.txt', encoding='latin-1') as myfile:
data = myfile.readlines()
low = 0
high = (len(data)-1)
while (low <= high) and not Found:
mid = int((low+high)/2)
if data[mid].rstrip() == Password:
Found = True
break
elif Password < str(data[mid]):
high = mid - 1
elif Password > str(data[mid]):
low = mid + 1
这段代码从密码中删除所有数字,将其转换为常用字母,并再次对照列表进行检查。 “Password123”会变成“password”,而“password”在列表中。
SimplePassword = ''.join([i for i in Password if not i.isdigit()])
SimplePassword = SimplePassword.lower()
if not Found:
with io.open('final.txt', encoding='latin-1') as myfile:
data = myfile.readlines()
low = 0
high = (len(data)-1)
while (low <= high) and not Found:
mid = int((low+high)/2)
if data[mid].rstrip() == SimplePassword:
PartiallyFound = True
break
elif SimplePassword < str(data[mid]):
high = mid - 1
elif SimplePassword > str(data[mid]):
low = mid + 1
我想通过编写一些可以识别字符串中的名称或单词的代码来进一步实现这一点。例如,单词“john”在列表中,单词“smith”在列表中。但是,输入的密码“JohnSmith123”会被忽视。
如何才能将字符串拆分为单独的单词?我正在考虑的一种方法是将大写字母之间的字母附加到数组中,然后单独检查该数组中的每个元素。
但必须有更好的方法。有什么方法可以查看输入的密码是否可以从大型单词列表中的单词变体构造?
【问题讨论】:
-
Peter Norvig 有一篇关于单词分析主题的非常好的 iPython 笔记本文章。任务 5 是分词。 nbviewer.jupyter.org/url/norvig.com/ipython/…
标签: python regex string search