Spaces:
Sleeping
Sleeping
| """ | |
| KSTools License Manager - 硬體資訊 API | |
| """ | |
| from fastapi import APIRouter | |
| router = APIRouter() | |
| async def get_hardware_info(): | |
| """ | |
| 取得硬體指紋生成說明 | |
| 此 API 提供給 Revit Plugin 開發者參考如何生成硬體指紋 | |
| """ | |
| return { | |
| "title": "KSTools 硬體指紋生成指南", | |
| "description": "用於生成唯一硬體標識的方法", | |
| "methods": { | |
| "cpu_id": { | |
| "description": "取得 CPU 處理器 ID", | |
| "wmi_query": "SELECT ProcessorId FROM Win32_Processor", | |
| "example_code": """ | |
| using System.Management; | |
| string cpuId = ""; | |
| using (var searcher = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor")) | |
| { | |
| foreach (var obj in searcher.Get()) | |
| { | |
| cpuId = obj["ProcessorId"]?.ToString(); | |
| break; | |
| } | |
| } | |
| """ | |
| }, | |
| "motherboard_serial": { | |
| "description": "取得主機板序號", | |
| "wmi_query": "SELECT SerialNumber FROM Win32_BaseBoard", | |
| "example_code": """ | |
| using System.Management; | |
| string mbSerial = ""; | |
| using (var searcher = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard")) | |
| { | |
| foreach (var obj in searcher.Get()) | |
| { | |
| mbSerial = obj["SerialNumber"]?.ToString(); | |
| break; | |
| } | |
| } | |
| """ | |
| }, | |
| "hash_generation": { | |
| "description": "使用 SHA256 生成最終硬體指紋", | |
| "algorithm": "SHA256", | |
| "example_code": """ | |
| using System.Security.Cryptography; | |
| using System.Text; | |
| public static string GetHardwareId() | |
| { | |
| string hwInfo = cpuId + mbSerial; | |
| using (var sha256 = SHA256.Create()) | |
| { | |
| var hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(hwInfo)); | |
| return Convert.ToBase64String(hash).Substring(0, 32); | |
| } | |
| } | |
| """ | |
| } | |
| }, | |
| "complete_example": { | |
| "description": "完整的硬體指紋生成類別", | |
| "filename": "HardwareFingerprint.cs", | |
| "code": """ | |
| using System; | |
| using System.Management; | |
| using System.Security.Cryptography; | |
| using System.Text; | |
| public static class HardwareFingerprint | |
| { | |
| public static string GetHardwareId() | |
| { | |
| string hwInfo = ""; | |
| // CPU ID | |
| using (var searcher = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor")) | |
| { | |
| foreach (var obj in searcher.Get()) | |
| { | |
| hwInfo += obj["ProcessorId"]?.ToString(); | |
| break; | |
| } | |
| } | |
| // 主機板序號 | |
| using (var searcher = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard")) | |
| { | |
| foreach (var obj in searcher.Get()) | |
| { | |
| hwInfo += obj["SerialNumber"]?.ToString(); | |
| break; | |
| } | |
| } | |
| // 生成 SHA256 雜湊 | |
| using (var sha256 = SHA256.Create()) | |
| { | |
| var hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(hwInfo)); | |
| return Convert.ToBase64String(hash).Substring(0, 32); | |
| } | |
| } | |
| } | |
| """ | |
| }, | |
| "integration_notes": { | |
| "api_endpoints": { | |
| "activate": "/api/license/activate", | |
| "validate": "/api/license/validate" | |
| }, | |
| "required_data": { | |
| "license_code": "從管理員取得的授權碼", | |
| "hardware_id": "使用上述方法生成的硬體指紋" | |
| }, | |
| "security_notes": [ | |
| "硬體指紋應該在本地生成,不要傳送原始硬體資訊", | |
| "建議在 Plugin 啟動時進行授權驗證", | |
| "可以定期(如每小時)重新驗證授權狀態", | |
| "處理網路連接失敗的情況,提供離線模式" | |
| ] | |
| }, | |
| "troubleshooting": { | |
| "common_issues": { | |
| "wmi_access_denied": "確保應用程式有足夠權限存取 WMI", | |
| "empty_hardware_info": "某些虛擬機器可能無法取得完整硬體資訊", | |
| "hash_collision": "雖然機率極低,但應該處理雜湊碰撞的情況" | |
| }, | |
| "fallback_methods": [ | |
| "使用 MAC 地址作為備選方案", | |
| "結合多種硬體資訊提高唯一性", | |
| "允許手動輸入硬體標識符" | |
| ] | |
| } | |
| } |