fastapi: 第三十章:用bcrypt加密字符串

一,代码

import hashlib
from datetime import datetime, timedelta, timezone
from typing import Optional
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel
import jwt
import bcrypt

# --- 配置参数 ---
SECRET_KEY = "your-super-secret-key-change-me-1234567890"  # 生产环境请使用安全的随机密钥
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30

# 模拟数据库
USER_DB = {
    "admin": {
        "username": "admin",
        "hashed_password": "$2b$12$vuryEKmyQS1V7ahHk5dTf.AD91zDS0ieNJLUhNfPMhE9tEmRAceWG",
    }
}

# 规定 Token 的获取地址(FastAPI 会自动在 Swagger UI 中生成登录按钮)
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

def get_password_hash(password: str) -> str:
    """Hash a password using bcrypt"""
    #
    return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")


def verify_password(plain_password: str, hashed: str) -> bool:
    """Verify a password against its hash"""
    return bcrypt.checkpw(
        plain_password.encode("utf-8"),
        hashed.encode("utf-8"),
        # hashed,
    )

调用:

@router.get("/password")
async def get_password(password: str = None):
    print("password:",password)
    hashed_password = get_password_hash(password)
    is_verify = verify_password(password, hashed_password)
    return {"orig_password": password, "hashed_password": hashed_password, "is_verify":is_verify}

二,测试效果:

image

posted @ 2026-06-12 10:53  刘宏缔的架构森林  阅读(6)  评论(0)    收藏  举报