#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 密碼雜湊生成工具 使用方法: 1. 直接執行:python generate_password_hash.py 2. 輸入新密碼(至少8字元,包含英文和數字) 3. 將生成的雜湊值複製到 .env 檔案的 LOGIN_PASSWORD 欄位 注意:執行後請立即刪除或清空終端機歷史記錄,避免明文密碼外洩 """ from werkzeug.security import generate_password_hash import sys import getpass def validate_password_strength(password): """ 驗證密碼強度 要求: - 至少 8 個字元 - 包含英文字母 - 包含數字 """ if len(password) < 8: return False, "密碼長度至少需要 8 個字元" has_letter = any(c.isalpha() for c in password) has_digit = any(c.isdigit() for c in password) if not has_letter: return False, "密碼必須包含英文字母" if not has_digit: return False, "密碼必須包含數字" return True, None def main(): print("=" * 60) print("🔐 MOMO 監控系統 - 密碼雜湊生成工具") print("=" * 60) print() print("密碼要求:") print(" • 至少 8 個字元") print(" • 包含英文字母(大小寫皆可)") print(" • 包含數字") print(" • 建議使用符號增加強度(如 !@#$%^&*)") print() try: # 使用 getpass 隱藏輸入(不會在終端顯示) password = getpass.getpass("請輸入新密碼: ") if not password: print("\n❌ 密碼不能為空") sys.exit(1) # 驗證密碼強度 is_valid, error_message = validate_password_strength(password) if not is_valid: print(f"\n❌ {error_message}") sys.exit(1) # 再次確認密碼 password_confirm = getpass.getpass("請再次輸入密碼: ") if password != password_confirm: print("\n❌ 兩次輸入的密碼不一致") sys.exit(1) # 生成雜湊 password_hash = generate_password_hash(password, method='pbkdf2:sha256', salt_length=16) print("\n" + "=" * 60) print("✅ 密碼雜湊生成成功!") print("=" * 60) print() print("請將以下內容複製到 .env 檔案中:") print() print(f"LOGIN_PASSWORD={password_hash}") print() print("⚠️ 安全提醒:") print(" 1. 請立即將上述雜湊值複製到 .env 檔案") print(" 2. 重新啟動 app.py 使新密碼生效") print(" 3. 清空終端機歷史記錄(history -c)") print(" 4. 不要將 .env 檔案提交到 Git") print(" 5. 定期更換密碼(建議每 90 天)") print() print("=" * 60) except KeyboardInterrupt: print("\n\n⚠️ 操作已取消") sys.exit(0) except Exception as e: print(f"\n❌ 發生錯誤: {e}") sys.exit(1) if __name__ == "__main__": main()