Python如何生成一個(gè)高強(qiáng)度的10位密碼
為什么密碼強(qiáng)度如此重要
根據(jù) Verizon《2023 年數(shù)據(jù)泄露調(diào)查報(bào)告》,超過(guò) 80%的網(wǎng)絡(luò)攻擊與弱密碼或被盜憑證有關(guān)。黑客使用各種技術(shù)破解密碼,包括暴力攻擊(嘗試所有可能的組合)、字典攻擊(使用常見(jiàn)單詞和短語(yǔ))以及社會(huì)工程學(xué)(獲取個(gè)人信息來(lái)猜測(cè)密碼)。

一個(gè) 10 位密碼看起來(lái)可能不長(zhǎng),但如果正確組合字符類(lèi)型,其安全性可能遠(yuǎn)超一個(gè) 20 位的簡(jiǎn)單短語(yǔ)。計(jì)算一下:如果密碼只使用小寫(xiě)字母(26 個(gè)字符),10 位密碼的可能組合是 26¹?(約 141 萬(wàn)億種可能)。但如果結(jié)合大寫(xiě)字母、數(shù)字和特殊字符(總共 72 個(gè)字符),可能組合達(dá)到 72¹?(約 3.7×10¹? 種可能),安全性提高了數(shù)百萬(wàn)倍。
密碼生成的核心原則
1. 字符多樣性是關(guān)鍵
一個(gè)強(qiáng)密碼應(yīng)當(dāng)包含四種字符類(lèi)型:
- 大寫(xiě)字母(A-Z,26 個(gè))
- 小寫(xiě)字母(a-z,26 個(gè))
- 數(shù)字(0-9,10 個(gè))
- 特殊字符(如!@#$%^&*等,通常至少 10 個(gè))
每種字符類(lèi)型的加入都顯著增加了密碼的熵值(隨機(jī)性度量)。例如,僅添加數(shù)字將使字符集從 26 個(gè)增加到 36 個(gè),而添加大寫(xiě)字母和特殊字符后,字符集可達(dá)到 72 個(gè)或更多。
2. 強(qiáng)制每種類(lèi)型至少出現(xiàn)一次
許多用戶(hù)在創(chuàng)建密碼時(shí)會(huì)忽略某些字符類(lèi)型,特別是特殊字符。這就是為什么強(qiáng)密碼生成規(guī)則必須強(qiáng)制每種類(lèi)型至少出現(xiàn)一次。這種做法確保了即使密碼長(zhǎng)度有限,也能保持較高的復(fù)雜性。
3. 真正的隨機(jī)性
人類(lèi)不擅長(zhǎng)創(chuàng)造真正的隨機(jī)序列。我們傾向于選擇有意義的模式、重復(fù)序列或可預(yù)測(cè)的替換(如用"@“代替"a”)。因此,密碼應(yīng)當(dāng)由計(jì)算機(jī)算法隨機(jī)生成,而不是由人類(lèi)創(chuàng)造。
密碼生成算法詳解
以下 Python 代碼實(shí)現(xiàn)了一個(gè)符合所有安全要求的密碼生成器:
import random
def generate_password():
# 定義字符集
uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
lowercase = 'abcdefghijklmnopqrstuvwxyz'
digits = '0123456789'
special = '!@#$%^&*'
# 每種類(lèi)型至少選1個(gè)
password = [
random.choice(uppercase),
random.choice(lowercase),
random.choice(digits),
random.choice(special)
]
# 剩余6位從所有字符中隨機(jī)選
all_chars = uppercase + lowercase + digits + special
password += random.choices(all_chars, k=6)
# 打亂順序避免模式識(shí)別
random.shuffle(password)
return ''.join(password)
密碼安全的最佳實(shí)踐
生成強(qiáng)密碼只是第一步,正確管理密碼同樣重要:
1. 使用密碼管理器
記住多個(gè)復(fù)雜密碼幾乎是不可能的任務(wù)。密碼管理器(如 LastPass、1Password 或 Bitwarden)可以安全地存儲(chǔ)和管理所有密碼,您只需要記住一個(gè)主密碼。
2. 啟用雙因素認(rèn)證(2FA)
即使密碼被破解,雙因素認(rèn)證也能提供額外保護(hù)。它要求除了密碼外,還需要第二種驗(yàn)證形式(如手機(jī)上的驗(yàn)證碼)。
3. 定期更換密碼
盡管對(duì)于強(qiáng)密碼來(lái)說(shuō),定期更換的必要性有所降低,但對(duì)于高安全需求的賬戶(hù),每 3-6 個(gè)月更換一次密碼仍是明智之舉。
4. 不同賬戶(hù)使用不同密碼
重復(fù)使用密碼是常見(jiàn)但危險(xiǎn)的做法。如果一個(gè)服務(wù)的密碼泄露,攻擊者可能會(huì)嘗試用同一密碼訪(fǎng)問(wèn)您的其他賬戶(hù)。
常見(jiàn)誤區(qū)與解答
誤區(qū) 1:密碼越長(zhǎng)越好
雖然長(zhǎng)度確實(shí)增加安全性,但復(fù)雜性同樣重要。一個(gè) 10 位的復(fù)雜密碼可能比一個(gè) 15 位的簡(jiǎn)單密碼更安全。
誤區(qū) 2:特殊字符越多越好
平衡是關(guān)鍵。過(guò)多特殊字符可能使密碼難以記憶(如果需要手動(dòng)輸入),并可能觸發(fā)某些系統(tǒng)的錯(cuò)誤。
誤區(qū) 3:頻繁更換密碼總是好的
過(guò)于頻繁更換密碼可能導(dǎo)致用戶(hù)選擇較弱密碼或采用可預(yù)測(cè)的模式。對(duì)于強(qiáng)密碼,較長(zhǎng)的更換周期可能更實(shí)用。
方法補(bǔ)充
方法一:python生成高強(qiáng)度密碼
#以下secrets、string、os、datetime,需要安裝,安裝步驟省略。
import secrets
import string
import os
import datetime
# 獲取時(shí)間
dt = datetime.datetime.now()
t = str(dt.year) + '年' + str(dt.month) + '月' + str(dt.day) + '日'
# t 就是把年月日拼接起來(lái)
print()
# 輸入密碼的重復(fù)數(shù),默認(rèn)是兩個(gè)字母,兩個(gè)數(shù)字,兩個(gè)特殊符號(hào),重復(fù)3次,案例 重復(fù)三次aa11..aa11..aa11.. ,重復(fù)1次 aa11..
ABC = input("字母大小寫(xiě)個(gè)數(shù):")
digit = input("數(shù)字個(gè)數(shù):")
Ss = input("特殊符號(hào)個(gè)數(shù):")
Repetitions0 = input("重復(fù)次數(shù):")
if Repetitions0 == "":
print("重復(fù)次數(shù)默認(rèn)為3")
else:
Repetitions = int(Repetitions0)+1
# 默認(rèn)值可修改
if ABC == "":
ABC = 2
if digit == "":
digit = 2
if Ss == "":
Ss = 2
if Repetitions0 == "":
Repetitions = 3
Repetitions = int(Repetitions)+1
# 控制獲取字母,數(shù)字,特殊符號(hào),隨機(jī)個(gè)數(shù)
def a(s1, s2, s3):
a1 = ''.join(secrets.choice(string.ascii_letters) for i1 in range(int(s1)))
a2 = ''.join(secrets.choice(string.digits) for i2 in range(int(s2)))
a3 = ''.join(secrets.choice(string.punctuation) for i3 in range(int(s3)))
a4 = a1 + a2 + a3
return a4
# 控制重復(fù)獲取隨機(jī)密碼
b = []
for i in range(1, int(Repetitions)):
if i == int(Repetitions):
break
else:
b.append(a(ABC, digit, Ss))
print('共' + str(len(''.join(b))) + '位', '密碼:' + ''.join(b))
# 獲取當(dāng)前路徑,生成一個(gè)密碼本.txt,保存密碼
current_path = os.getcwd()
print(current_path)
with open(f'{current_path}/密碼本.txt', 'a') as f:
print(f"{t}", file=f)
with open(f'{current_path}/密碼本.txt', 'a') as f:
print(f"共{str(len(''.join(b)))}位,密碼:-----{''.join(b)}-----", file=f)方法二:使用Python生成四種字符組合的復(fù)雜隨機(jī)密碼
使用Python的random和string庫(kù)生成大寫(xiě)字母、小寫(xiě)字母、數(shù)字、特殊字符(14個(gè))這四種字符組合的復(fù)雜度較高的隨機(jī)密碼。精選特殊字符,兼容性好。
# conding: utf-8
import random
import string
import logging
logging.basicConfig(level=logging.INFO)
def new_password(password_length=10) -> string:
"""
生成指定長(zhǎng)度(8到32位)的隨機(jī)密碼,默認(rèn)10位。
"""
if password_length < 8:
logging.warning("警告:密碼長(zhǎng)度不能小于8,輸入的密碼長(zhǎng)度為:{}".format(password_length))
password_length = 8
if password_length > 32:
logging.warning("警告:密碼長(zhǎng)度不能大于32,輸入的密碼長(zhǎng)度為:{}".format(password_length))
password_length = 32
special_chars = "!@#$%^&*()_+-="
special_chars_num = random.randint(1, 2)
digits_num = random.randint(1, 3)
upper_chars_num = (password_length - special_chars_num - digits_num) // 2
lower_chars_num = (password_length - special_chars_num - digits_num - upper_chars_num)
password_chars = random.sample(special_chars, special_chars_num) + \
random.sample(string.digits, digits_num) + \
random.sample(string.ascii_uppercase, upper_chars_num) + \
random.sample(string.ascii_lowercase, lower_chars_num)
password = ''.join(random.sample(password_chars, password_length))
return password
print(new_password())
到此這篇關(guān)于Python如何生成一個(gè)高強(qiáng)度的10位密碼的文章就介紹到這了,更多相關(guān)Python生成高強(qiáng)度10位密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python入門(mén)基礎(chǔ)之import機(jī)制
這篇文章主要給大家介紹了關(guān)于Python入門(mén)基礎(chǔ)之import機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
linux環(huán)境部署清華大學(xué)大模型最新版 chatglm2-6b 圖文教程
這篇文章主要介紹了linux環(huán)境部署清華大學(xué)大模型最新版 chatglm2-6b ,結(jié)合實(shí)例形式詳細(xì)分析了Linux環(huán)境下chatglm2-6b部署相關(guān)操作步驟與注意事項(xiàng),需要的朋友可以參考下2023-07-07
python簡(jiǎn)單的函數(shù)定義和用法實(shí)例
這篇文章主要介紹了python簡(jiǎn)單的函數(shù)定義和用法,實(shí)例分析了Python自定義函數(shù)及其使用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05
python基礎(chǔ)教程之基本內(nèi)置數(shù)據(jù)類(lèi)型介紹
在Python程序中,每個(gè)數(shù)據(jù)都是對(duì)像,每個(gè)對(duì)像都有自己的一個(gè)類(lèi)型。不同類(lèi)型有不同的操作方法,使用內(nèi)置數(shù)據(jù)類(lèi)型獨(dú)有的操作方法,可以更快的完成很多工作2014-02-02
Python常用的json標(biāo)準(zhǔn)庫(kù)
今天小編就為大家分享一篇關(guān)于Python常用的json標(biāo)準(zhǔn)庫(kù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
使用 Python 實(shí)現(xiàn)微信群友統(tǒng)計(jì)器的思路詳解
這篇文章主要介紹了使用 Python 實(shí)現(xiàn)微信群友統(tǒng)計(jì)器的思路詳解,需要的朋友可以參考下2018-09-09
Numpy實(shí)現(xiàn)矩陣運(yùn)算及線(xiàn)性代數(shù)應(yīng)用
這篇文章主要介紹了Numpy實(shí)現(xiàn)矩陣運(yùn)算及線(xiàn)性代數(shù)應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Python處理JSON的完全指南:從基礎(chǔ)到實(shí)戰(zhàn),掌握數(shù)據(jù)交換核心技能
本文將從?JSON?與?Python?的類(lèi)型映射講起,帶你理解序列化與反序列化的底層邏輯,然后通過(guò)實(shí)戰(zhàn)案例演示如何解析?API?數(shù)據(jù)、處理自定義對(duì)象,最后總結(jié)出?3?個(gè)避坑技巧2026-06-06
python實(shí)現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法
這篇文章主要介紹了python實(shí)現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法,涉及Python中l(wèi)ist方法的使用技巧,需要的朋友可以參考下2015-05-05

