【FastAPI 學習筆記 EP.15】Password Hashing 密碼雜湊

更新 發佈閱讀 5 分鐘

什麼是密碼雜湊?

密碼雜湊 (Password Hashing) 是指將明文密碼轉換為不可逆的雜湊值,確保即使資料庫外洩,攻擊者也無法還原原始密碼。通常應用於使用者註冊時的密碼儲存,以及登入時的密碼驗證流程。

密碼雜湊基礎語法

  1. 安裝依賴套件:使用 pip install "passlib[argon2]" 安裝 FastAPI 的 argon2 演算法
  2. 初始化雜湊:建立 CryptContext 物件並指定 schemes=["argon2"],設定 deprecated="auto" 以自動處理舊版雜湊
  3. 執行雜湊 (Hash):呼叫 .hash(password) 方法,將使用者輸入的明文密碼轉為雜湊值
  4. 驗證密碼 (Verify):呼叫 .verify(plain_password, hashed_password) 方法,比對輸入的明文與資料庫中的雜湊值是否匹配
# 必須先安裝套件:pip install "passlib[argon2]"
from passlib.context import CryptContext  # 匯入密碼處理上下文類別

# 設定密碼雜湊情境 (Context)
pwd_context = CryptContext(schemes=["argon2"], deprecated="auto")

def get_password_hash(password: str) -> str:
    """
    將明文密碼轉換為雜湊值
    """
    return pwd_context.hash(password)  # 執行雜湊運算並回傳結果字串

def verify_password(plain_password: str, hashed_password: str) -> bool:
    """
    驗證明文密碼與雜湊值是否匹配
    """
    # 注意參數順序:先傳入明文 (plain),再傳入雜湊 (hashed)
    return pwd_context.verify(plain_password, hashed_password)

if __name__ == "__main__":
    # 模擬使用者註冊:輸入明文密碼
    user_input_raw = "my_super_secret_123"  # 使用者輸入的原始密碼

    # 存入資料庫前進行雜湊處理
    db_stored_hash = get_password_hash(user_input_raw)  # 取得雜湊後的字串
   
    print(f"明文密碼: {user_input_raw}")  # 印出明文 (僅供教學示範)
    print(f"資料庫儲存的雜湊值: {db_stored_hash}")  # 印出類似 $argon2id$... 的雜湊值
   
    # 模擬使用者登入:輸入正確密碼
    login_attempt = "my_super_secret_123"  # 再次輸入相同密碼
    is_valid = verify_password(login_attempt, db_stored_hash)  # 比對密碼
   
    print(f"登入驗證結果 (正確密碼): {is_valid}")  # 預期輸出 True

    # 模擬使用者登入:輸入錯誤密碼
    wrong_attempt = "wrong_password"  # 輸入不同密碼
    is_valid_wrong = verify_password(wrong_attempt, db_stored_hash)  # 比對密碼

    print(f"登入驗證結果 (錯誤密碼): {is_valid_wrong}")  # 預期輸出 False
留言
avatar-img
梧笙 WuSheng 的沙龍
65會員
17內容數
⛰️ 梧笙,意即「吾生」,我是一個平凡的理工宅男。 生活離不開 Code 與 Game,這裡主要紀錄與分享: 📖 學習筆記|紀錄我學習過的電腦技能與知識。 💻 科技新知|整理實用工具與科技領域的資訊。 🎮 電玩娛樂|聊聊遊戲動漫與實況直播的話題。 目前更新頻率不固定,有興趣歡迎追蹤。
2026/01/06
FastAPI 會提供 OpenAPI Schema,並內建互動式文件介面 Swagger UI,預設路徑為 /docs,可直接在瀏覽器測試 API。
Thumbnail
2026/01/06
FastAPI 會提供 OpenAPI Schema,並內建互動式文件介面 Swagger UI,預設路徑為 /docs,可直接在瀏覽器測試 API。
Thumbnail
2026/01/06
回應模型 (Response Model) 是基於 Pydantic 定義的資料規格,用於限制、過濾及格式化 API 回傳給前端的資料。簡單來說,當後端從資料庫取出原始資料後,回應模型會自動過濾掉敏感或不需要的欄位(例如密碼),僅將符合規格的資料交給客戶端。
Thumbnail
2026/01/06
回應模型 (Response Model) 是基於 Pydantic 定義的資料規格,用於限制、過濾及格式化 API 回傳給前端的資料。簡單來說,當後端從資料庫取出原始資料後,回應模型會自動過濾掉敏感或不需要的欄位(例如密碼),僅將符合規格的資料交給客戶端。
Thumbnail
2025/12/31
在 FastAPI 開發中,ORM 模型是用來與資料庫進行互動的橋樑。簡單來說,它將Python 的類別 (Class)對應到資料庫的表格 (Table),並將類別的屬性對應到表格的欄位 (Column)。
Thumbnail
2025/12/31
在 FastAPI 開發中,ORM 模型是用來與資料庫進行互動的橋樑。簡單來說,它將Python 的類別 (Class)對應到資料庫的表格 (Table),並將類別的屬性對應到表格的欄位 (Column)。
Thumbnail
看更多
你可能也想看
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
實作密碼產生器 請使用者輸入要產生幾位數的密碼長度 依據使用者輸入的密碼長度,輸出密碼 import random import string 數字 = string.digits 英文 = string.ascii_letters 字母表 = 數字 + 英文 # 0123456789abc
Thumbnail
實作密碼產生器 請使用者輸入要產生幾位數的密碼長度 依據使用者輸入的密碼長度,輸出密碼 import random import string 數字 = string.digits 英文 = string.ascii_letters 字母表 = 數字 + 英文 # 0123456789abc
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
本篇文章將繼續分享 python Kivy 中 TextInput 部件的用法,涵蓋設定文字與背景顏色、游標,並示範如何加入提示文字、設定為密碼輸入模式。
Thumbnail
本篇文章將繼續分享 python Kivy 中 TextInput 部件的用法,涵蓋設定文字與背景顏色、游標,並示範如何加入提示文字、設定為密碼輸入模式。
Thumbnail
前言 這篇文章將分享如何利用 Python 工具,自動化從公開資訊觀測站(MOPS)與 Yahoo Finance 抓取台灣市場(上市、上櫃、興櫃)的月營收財報與歷史股價。我們將建立一個本地端資料庫,並將其同步至免費的雲端資料庫 Supabase,作為後續視覺化分析的基礎。 步驟一:準備開發環
Thumbnail
前言 這篇文章將分享如何利用 Python 工具,自動化從公開資訊觀測站(MOPS)與 Yahoo Finance 抓取台灣市場(上市、上櫃、興櫃)的月營收財報與歷史股價。我們將建立一個本地端資料庫,並將其同步至免費的雲端資料庫 Supabase,作為後續視覺化分析的基礎。 步驟一:準備開發環
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News