iT邦幫忙

1

可以自訂規則的密碼產生器....

  • 分享至 

  • xImage

鵝因為要連某些單位,然後他們訂了些超囉嗦的密碼規則,造成一般密碼產生器產生的密碼基本上都不能用,請問一下除了自己寫之外,有哪些現成的密碼產生器是可以自訂規則的/images/emoticon/emoticon06.gif....

PS:剛丟到ChatGPT了,不過這規則很明顯是把一堆教課書上的說法硬湊在一起的結果,"Web接收user輸入時應該把可能造成server side異常的字元濾掉,例如!#$%&...blah blah",但又要求密碼一定要包括特殊字元,結果就是搞了個難以執行的規則....

https://ithelp.ithome.com.tw/upload/images/20251124/20004868EdcfgvFVSr.png

看更多先前的討論...收起先前的討論...
owen123f iT邦新手 5 級 ‧ 2025-11-24 10:26:14 檢舉
右上角齒輪能改要用什麼符號,https://sayoko123f.github.io/password-get/
cmwang iT邦大師 1 級 ‧ 2025-11-24 10:39:10 檢舉
謝了,不過這些規則老實說沒啥實際意義就是了....
froce iT邦大師 1 級 ‧ 2025-11-24 11:12:36 檢舉
html真的應該加個 secure rule 的attr標準來做password規則驗證。
mathewkl iT邦高手 1 級 ‧ 2025-11-24 13:02:49 檢舉
KeePass的密碼自訂規則可以指定符號,雖然生成的有些沒辦法符合,多跑幾次。
PIZZ iT邦研究生 5 級 ‧ 2025-11-24 14:02:04 檢舉
"現成的"傑米尼的python語法:
import random
import string

def check_username_conflict(username, password):
"""
規則 2 檢查:不包含使用者帳號中超過兩個以上的連續字元。
這代表帳號中的任何「3個字元長的子字串」都不能出現在密碼中。
"""
if not username or len(username) < 3:
return True # 帳號太短,無法構成違規條件,直接通過

# 將比對轉為小寫以增加安全性(雖然規則未明說,但通常建議忽略大小寫比對)
# 若要嚴格區分大小寫,請移除 .lower()
u_lower = username.lower()
p_lower = password.lower()

# 滑動視窗檢查:取出帳號中每 3 個連續字元,檢查是否存在於密碼中
for i in range(len(u_lower) - 2):
substring = u_lower[i:i+3]
if substring in p_lower:
return False # 發現重複,檢查失敗
return True

def generate_password(username, length=16):
"""
主要產生函數
"""
# 規則 1: 長度大於 12
if length <= 12:
print("❌ 錯誤:密碼長度必須大於 12 個字元。")
return None

# 規則 3: 定義允許的字元集合
# 符號只允許 @^,-+=/_. (根據圖片圈選)
allowed_symbols = "@^,-+=/_."

lower_chars = string.ascii_lowercase
upper_chars = string.ascii_uppercase
digit_chars = string.digits

# 總字元池
all_pool = lower_chars + upper_chars + digit_chars + allowed_symbols

while True:
# 步驟 A: 確保每種必要類型至少有一個
password_list = [
random.choice(lower_chars),
random.choice(upper_chars),
random.choice(digit_chars),
random.choice(allowed_symbols)
]

# 步驟 B: 剩下的長度隨機填充
for _ in range(length - 4):
password_list.append(random.choice(all_pool))

# 步驟 C: 打亂順序
random.shuffle(password_list)
candidate_password = "".join(password_list)

# 步驟 D: 檢查是否違反規則 2 (帳號關聯性)
if check_username_conflict(username, candidate_password):
return candidate_password
# 如果違反規則,while 迴圈會繼續執行,重新產生一組

# --- 主程式執行區 ---
if __name__ == "__main__":
print("=== 符合特定規則的密碼產生器 ===")

# 輸入使用者帳號 (用於規則檢查)
user_account = input("請輸入使用者帳號 (用於檢查連續字元): ")

# 輸入想要長度 (預設建議 16)
try:
desired_len = int(input("請輸入密碼長度 (必須 > 12): "))
except ValueError:
desired_len = 16 # 輸入錯誤時的預設值
print("輸入格式錯誤,將使用預設長度 16。")

# 產生密碼
new_pass = generate_password(user_account, desired_len)

if new_pass:
print("-" * 30)
print(f"✅ 生成的隨機密碼: {new_pass}")
print("-" * 30)
print("⚠️ 提醒您:規則 4 要求「新密碼需與前 3 次設定不同」,請自行確認此密碼未使用過。")

# ★★★ 請務必加入下面這一行 ★★★
input("\n程式執行完畢,請按 Enter 鍵關閉視窗...")
cmwang iT邦大師 1 級 ‧ 2025-11-24 16:09:36 檢舉
謝了,其實直接用亂數產生密碼就不會有和username相關或是重複使用舊密碼的問題,只是鵝覺得那堆規則實在是成事不足,敗事有餘啊....
froce iT邦大師 1 級 ‧ 2025-11-24 16:29:46 檢舉
> 那堆規則實在是成事不足,敗事有餘啊

的確,在這個密碼最基本要加密存hash的時代,還在限制那些字元實在是食古不化。
Jasper iT邦新手 5 級 ‧ 2025-11-24 17:32:59 檢舉
其實現在巨頭們都在推行 passkeys 了
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1

我知道你老了
記不住了
前三次又要不同

一個人最少要記3組以上的密碼
筆記本一本10元
拿出來用吧
不在網路上
很安全的

我是反串的 XD

cmwang iT邦大師 1 級 ‧ 2025-11-24 11:23:25 檢舉

其實主要的問題是每個user各有各的規則,鵝哪有那個能耐去搞一大堆符合這堆超機車的規則的密碼啊/images/emoticon/emoticon06.gif....

我要發表回答

立即登入回答