python实战——密码生成器
生活随笔
收集整理的這篇文章主要介紹了
python实战——密码生成器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求
日常生活中因為工作或生活的需要,我們注冊了一堆賬號,需要創建一堆密碼。有的人可能圖省事所有賬號的密碼都是一樣的,這種做法非常不安全,一旦有個賬號或對應的平臺出現問題,就非常麻煩,但是 每個賬號都去創建新的密碼,想密碼也是非常讓人頭痛的問題。
我們本篇實在的目的就是使用python實現一個密碼生成器,分成兩種情況,第一種:對密碼的組成字母、數字、特殊字符有比例要求(類中固定比例為字母——數字——特殊字符:5:3:2),第二種 對密碼的組成及比例沒有要求,隨機生成就好,讓我們一起來實現這個小功能吧。
實現
實現類為PasswordGenerator,有三個靜態字段ALPHA、NUMBER、SPECIAL分別表示待選的字母,數字以及特殊字符,這里偷懶沒有放大寫字母,有興趣的朋友可以把它加上。有兩個屬性password_length,password分別表示密碼長度和最終生成的密碼。有一個靜態方法generate_pass,功能為根據候選字符串和需要生成的字符串長度隨機生成給定長度的字符串。兩個方案fixed_proportion_generate、random_generate,分別表示生成固定組成比例的密碼字符串和隨機密碼字符串。
類的具體實現如下,為了便于讀者理解,盡量都加了注釋:
class PasswordGenerator:# 候選字母ALPHA = "abcdefghijklmnopqrstuvwxyz"# 候選數字NUMBER = "0123456789"# 候選特殊字符SPECIAL = "@#$%&*"def __init__(self, password_length=8):"""初始化:param password_length:密碼長度,默認為8"""self.password_length = password_length# 存放生成的密碼self.password = []def random_generate(self):"""密碼字符、數字、以及特殊字符的比例是隨機來生成密碼:return:"""# string.ascii_letters :ASCII碼,包括字母的大小寫(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz)# string.digits :數字字符串 0123456789# string.punctuation :特殊字符字符串 !"#$%&'()*+,-./:;<=>?@[\]^_{|}~total = string.ascii_letters + string.digits + string.punctuationreturn "".join(random.sample(total, self.password_length))def fixed_proportion_generate(self):"""固定字母——數字——特殊字符的比例這里是按照5——3——2的比例來生成密碼:return:"""alpha_len = self.password_length // 2num_len = math.ceil(self.password_length * 30 / 100)special_len = self.password_length - (alpha_len + num_len)# 生成密碼的字母部分self.password.append(PasswordGenerator.generate_pass(alpha_len, PasswordGenerator.ALPHA, True))# 生成密碼的數字部分self.password.append(PasswordGenerator.generate_pass(num_len, PasswordGenerator.NUMBER))# 生成密碼的特殊字符部分self.password.append(PasswordGenerator.generate_pass(special_len, PasswordGenerator.SPECIAL))gen_password = []for i in self.password:gen_password.extend(i)# 隨機打亂生成的密碼順序random.shuffle(gen_password)# 連接成字符串返回return "".join(gen_password)@staticmethoddef generate_pass(length, array, is_alpha=False):password = []for i in range(length):index = random.randint(0, len(array) - 1)character = array[index]if is_alpha:case = random.randint(0, 1)if case == 1:character = character.upper()password.append(character)return password接下來我們來使用這個類來生成密碼,代碼如下:
if __name__ == '__main__':# 使用密碼生成器pass_len = int(input("請輸入密碼長度:"))is_fixed = bool(input("是否固定比例(true/false):"))generator = PasswordGenerator(pass_len)gen_password = ''if is_fixed:gen_password =generator.fixed_proportion_generate()else:gen_password = generator.random_generate()print(gen_password)最終效果如下:
# 固定比例 >>>請輸入密碼長度:12 >>>是否固定比例(true/false):true >>>1HT&6$Fox1B4 # 非固定比例 >>>請輸入密碼長度:10 >>>是否固定比例(true/false):false >>>k03$aOM$z5歡迎大家留意交流哈
總結
以上是生活随笔為你收集整理的python实战——密码生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 抓包tcp
- 下一篇: Oracle数据库的ORA-00257故