」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 用 Python 建構密碼強度檢查器

用 Python 建構密碼強度檢查器

發佈於2024-11-01
瀏覽:982

大家好,歡迎來到今天的教學。今天,我們將使用 Python 建立一個簡單的密碼強度檢查器。我們將逐步解釋該程式碼的工作原理,並提供有關如何改進密碼的提示。

為什麼密碼強度很重要?

弱密碼會讓駭客更容易透過各種方法猜測或破解,從而使您的個人資訊面臨風險。強密碼是:

  • 夠長(至少12個字)
  • 混合使用字母(大寫和小寫)、數字和特殊字元
  • 避免常見或可預測的單字

讓我們開始建立一個根據這些規則評估密碼強度的工具。

設定您的環境

在我們開始編碼之前,請確保您的電腦上安裝了 Python。

建立一個新的 Python 文件,您將在其中編寫程式碼。另外,下載包含最常見密碼的檔案(稍後我們將詳細介紹)並將該檔案保存在與該專案的 Python 檔案相同的目錄中。

導入必要的庫

import string

字串模組提供了有用的常數來檢查字元類型,如大寫字母、數字和特殊字元。

檢查常用密碼

def check_common_password(password):
    with open('common-password.txt', 'r') as f:
        common = f.read().splitlines()
    if password in common:
        return True
    return False

此函數檢查給定的密碼是否在常用密碼清單中。

  • 它會開啟我們先前下載的名為「common-password.txt」的檔案。
  • 它將該檔案中的所有密碼讀取到清單中。
  • 如果輸入的密碼在此清單中,則傳回 True(表示它是通用密碼,因此是弱密碼)。
  • 否則回傳False。

為什麼這很重要? 許多駭客從嘗試通用密碼開始,因此使用密碼會讓您的帳戶非常容易受到攻擊。

評估密碼強度

def password_strength(password):
    score = 0
    length = len(password)

    upper_case = any(c.isupper() for c in password)
    lower_case = any(c.islower() for c in password)
    special = any(c in string.punctuation for c in password)
    digits = any(c.isdigit() for c in password)

    characters = [upper_case, lower_case, special, digits]

    if length > 8:
        score  = 1
    if length > 12:
        score  = 1
    if length > 17:
        score  = 1
    if length > 20:
        score  = 1

    score  = sum(characters) - 1

    if score 



此函數根據多個標準評估密碼的強度。

  • 密碼長度超過 8、12、17 和 20 個字元將獲得積分。
  • 它檢查是否有大寫字母、小寫字母、特殊字元和數字。

評分是如何進行的?

  1. 分數從 0 開始。
  2. 每通過一個長度閾值就加 1 分。
  3. 使用的每種字元(大寫、小寫、特殊、數字)加 1 分,減 1。
  4. 根據最終得分,將密碼分類為「弱」、「還好」、「好」或「強」。

向用戶提供回饋

def feedback(password):
    if check_common_password(password):
        return "Password was found in a common list. Score: 0/7"

    strength, score = password_strength(password)

    feedback = f"Password strength: {strength} (Score: {score}/7)\n"

    if score 



此功能結合了前兩個功能,提供全面的回饋。

  • 它首先檢查密碼是否通用。如果是這樣,它會立即返回警告。
  • 如果密碼不常見,則會評估其強度。
  • 提供強度等級和分數。
  • 如果密碼較弱(分數

主機程式

password = input("Enter the password: ")
print(feedback(password))

最後一部分只是要求使用者輸入密碼,然後列印回饋。

行動計劃

Building a Password Strength Checker in Python

結論

建立強密碼是維護線上安全的重要組成部分,使用此工具,您可以輕鬆評估密碼的安全性。這個簡單的程式示範如何將基本的 Python 程式設計與網路安全原則結合來解決現實世界的問題。

隨意嘗試程式碼並添加更多功能。

快樂編碼,保持安全!

版本聲明 本文轉載於:https://dev.to/immah/building-a-password-strength-checker-in-python-47om?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何從 ASP.NET Core Web API 控制器傳回檔案?
    如何從 ASP.NET Core Web API 控制器傳回檔案?
    在ASP.NET Core Web API 中處理文件下載嘗試從ASP.NET Web API 控制器返回文件時,您可能會遇到以下問題:響應被視為JSON。要解決此問題,了解在 ASP.NET Core 中下載檔案的正確方法至關重要。 要在 ASP.NET Core Web API 中傳回文件,您需...
    程式設計 發佈於2024-11-09
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-09
  • 如何將移動站點限制為橫向並停用自動旋轉?
    如何將移動站點限制為橫向並停用自動旋轉?
    增強行動網站體驗:強制橫向方向並停用自動旋轉在設計行動響應能力時,某些方向可能會對用戶產生重大影響經驗。此問題尋求一種解決方案,將行動網站限制為橫向並停用自動旋轉。 CSS 解決方案實現此目的的一種方法是透過 CSS 媒體查詢。透過為橫向和縱向建立單獨的樣式表,您可以根據裝置的方向控制網站的行為。實...
    程式設計 發佈於2024-11-09
  • Mac OS X 上的 Python 專案創建
    Mac OS X 上的 Python 專案創建
    介紹 PyFabricate 是一款 Mac OS X 應用程序,可簡化 Python 專案的建立。 自從我創作它以來,顯然它是我認為 Python 專案應該是什麼樣子的一個固執己見的版本。 此外,我還有一個特定的工具集,可以用來編寫 Python Mac OS X 應用程式。...
    程式設計 發佈於2024-11-09
  • 如何修復 PHP 中的「嘗試取得非物件的屬性」錯誤?
    如何修復 PHP 中的「嘗試取得非物件的屬性」錯誤?
    解決PHP 中的“嘗試獲取非對象的屬性”錯誤使用PHP 時,您可能會遇到錯誤“嘗試獲取非物件的屬性」獲得非物體的財產。 「當嘗試存取尚未正確初始化或為null 的物件的屬性時,通常會發生此錯誤。 在提供的程式碼的情況下,問題在於從資料庫取得側邊選單資料。mysql_fetch_object() 函數...
    程式設計 發佈於2024-11-09
  • ## 如何修改 Python 原始碼,同時保留格式和註解?
    ## 如何修改 Python 原始碼,同時保留格式和註解?
    使用AST 修改Python 原始碼使用AST 修改Python 原始碼解析、修改和寫回Python 原始碼對於突變測試等任務來說是一項很突變測試等任務來說是一項很有價值的任務。雖然標準 Python 模組提供了解析和編譯程式碼的方法,但它們缺乏修改和重寫原始程式碼的能力。 為了滿足這一需求,一些庫...
    程式設計 發佈於2024-11-09
  • 如何使用 JavaScript 根據另一個下拉清單中的選擇填入下拉清單?
    如何使用 JavaScript 根據另一個下拉清單中的選擇填入下拉清單?
    使用JavaScript 根據另一個下拉列表中的選擇填充一個下拉列表當面臨根據另一個下拉列表中的選擇動態更新一個下拉列表中的選項的任務時,它是對於避免不必要的複雜性(例如資料庫查詢)至關重要。讓我們探索一個簡單的基於 JavaScript 的解決方案,無需 AJAX 呼叫即可完成此任務。 為了說明此...
    程式設計 發佈於2024-11-09
  • 如何從具有不同數組長度的字典創建 Pandas DataFrame?
    如何從具有不同數組長度的字典創建 Pandas DataFrame?
    從條目長度不均勻的字典建立 DataFrame在 Python 中,可以從每個條目保存一個 Numpy 陣列的字典建立 DataFrame。然而,當條目之間的數組長度不同時,就會出現挑戰。預設情況下,Pandas 需要統一長度的數組,從而導致類似“ValueError: arrays must al...
    程式設計 發佈於2024-11-09
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-09
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-09
  • 為什麼在 Java 中使用相同的種子時會得到相同的隨機數?
    為什麼在 Java 中使用相同的種子時會得到相同的隨機數?
    具有固定種子的Java隨機數:為什麼輸出相同? 在您的程式碼中,您定義了一種使用以下命令產生隨機數的方法指定的種子。但是,您會注意到,當您提供相同的種子時,所有 100 個產生的數字都是相同的。 此行為是預期的,因為在 Random 建構函式中使用相同的種子會產生可預測的數字序列。種子是初始化隨機數...
    程式設計 發佈於2024-11-09
  • jQuery Chaining 如何簡化開發並提高程式碼效率?
    jQuery Chaining 如何簡化開發並提高程式碼效率?
    理解 jQuery 中的物件和方法連結在 jQuery 中,連結允許在單一語句中串聯多個 jQuery 方法。這使開發人員能夠簡化程式碼並輕鬆執行複雜的操作。 連結的基本原理涉及每個 jQuery 方法的回傳值。當呼叫 jQuery 方法時,它通常會傳回一個表示所選元素的 jQuery 物件。這允許...
    程式設計 發佈於2024-11-09
  • Hono.js 基準測試:Node.js、Deno 和 Bun — 哪個最快?
    Hono.js 基準測試:Node.js、Deno 和 Bun — 哪個最快?
    Deno 2.0 剛剛發布,並聲稱比 Bun 和 Node.js 更快,同樣,Bun 也聲稱更快。這引起了我的興趣,所以我決定測試它們的性能,看看它們在現實場景中的比較。 為了公平比較,我需要選擇一個與所有三種 JavaScript 執行時間環境(Node.js、Deno 和 Bun)相容的框架。...
    程式設計 發佈於2024-11-09
  • 何時應該使用 Tkinter 的 Entry Get 函數來有效檢索輸入?
    何時應該使用 Tkinter 的 Entry Get 函數來有效檢索輸入?
    Tkinter Entry 的Get 函數:深入探討其功能和用法在Tkinter 中,Entry 小部件通常用於收集用戶輸入以進一步收集使用者輸入然而,與Entry 關聯的get() 函數通常無法產生所需的結果,這可能會讓開發人員感到困惑。本文深入探討 get() 的概念,全面了解其執行與應用。 理...
    程式設計 發佈於2024-11-09
  • 如何克服 PHP 中日期表示的 2038 限制?
    如何克服 PHP 中日期表示的 2038 限制?
    PHP 中的日期表示:克服2038 年限制雖然PHP 的原生日期函數在2038 年有一個截止日期,但還有其他方法處理超出此限制的日期。其中一種方法是僅儲存年、月和日,而忽略小時、分鐘、秒和毫秒部分。 透過丟棄這些附加時間部分,可以顯著擴展可表示日期的範圍。這是因為這些元件中的每一個都佔用了 PHP ...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3