1 问题
在生活中我们常常见过各种小密码比如门锁密码,小电驴的密码等等,今天就带大家了解如何制作一个简单的密码本。
2 方法
第一步,把密码的位数的区间设为我们实例化密码本的一个参数:
第二步,确定要轮询的字符组合,就是确认密码中是否有大小写字母和特殊字符。
第三步,在__init__方法中,设定模式:
model = 1 纯数字密码本,model = 2 数字带字母密码本,model = 3 数字带字母再带特殊字符密码本
第四步,把密码本变成一个可迭代对
第五步,再把密码本变成一个迭代器,这样每次迭代都会生成不同的密码(理论上)。
代码清单 1
class PasswordBook: def __init__(self, min_len, max_len): if min_len < max_len: self.min_len = min_len self.max_len = max_len else: self.min_len = max_len self.max_len = min_len class PasswordBook: small_character = "abcdefghijklmnopqrstuvwxyz" big_character = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" number = "0123456789" special_sign = "~!@#$%^&*()_+|}{[]';,./<>:=-" def __init__(self, min_len, max_len, model): self.model = model if min_len < max_len: self.min_len = min_len self.max_len = max_len else: self.min_len = max_len self.max_len = min_len def __iter__(self): return self class PasswordBook: small_character = "abcdefghijklmnopqrstuvwxyz" big_character = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" number = "0123456789" special_sign = "~!@#$%^&*()_+|}{[]';,./<>:=-" def __init__(self, min_len, max_len, model): self.model = model if min_len < max_len: self.min_len = min_len self.max_len = max_len else: self.min_len = max_len self.max_len = min_len import random class PasswordBook: small_character = "abcdefghijklmnopqrstuvwxyz" big_character = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" number = "0123456789" special_sign = "~!@#$%^&*()_+|}{[]';,./<>:=-" def __init__(self, min_len, max_len, model): self.model = model if min_len < max_len: self.min_len = min_len self.max_len = max_len else: self.min_len = max_len self.max_len = min_len def __iter__(self): return self def __next__(self): result_word = '' # 判断模式 if model == 1: words = self.number elif model == 2: words = self.number+self.small_character+self.big_character else: words = self.number+self.small_character+self.big_character+self.special_sign # 随机迭代输出符合要求的密码 for i in range(0, random.randint(self.min_len, self.max_len)): result_word += random.choice(words) return result_word 输出结果:H3h%7(y* 3uF^tIG A&)7UYe 5Q>< US;[* p'$t 8b> G'4 S0wBoRU+KW # bA}G'Qt; .Q8#$bFz o{0J RW6<F8c~X- )~USp&&] x * %$P^ tM^ 9@6WBnu#t VtL{1 7P5&2gqc/I 'F%@suk@_ reV M$ P9O5Vayi#[ eg2O:'48 o 6iuday5e0 R3K%[)Er CI3K^G E58^Yt47 :8q8 9IeXxK$ |
3 结语
针对如何用python制作一个密码本的问题,小组成员通过把模式(model)的判断,密码的生成都写到_next_方法中,以及在函数中重复利用迭代的方法解决问题,通过几次实验的改进和密码的错试,证明该方法是有效的,本文的方法有一些不足或考虑不周的地方,比如密码较为简单,未来可以通过多利用特殊字符使得密码的安全性提高。