架構分層
Solution
├── Models // 實體類 User.cs
├── DAL // Data Access Layer (SQLHelper, UserDAL)
├── BLL // Business Logic Layer (UserService)
├── UI // WinForm / WPF / ASP.NET (LoginForm, RegisterForm)
└── Common // 工具類 (MD5加密, 驗證碼)
核心步驟
- SSMS 建庫建表:
`CREATE DATABASE UserDB; USE UserDB; CREATE TABLE Users(Id INT PRIMARY KEY IDENTITY, Username NVARCHAR(50) UNIQUE, PasswordHash NVARCHAR(100), Salt NVARCHAR(20), Email NVARCHAR(100), CreatedAt DATETIME DEFAULT GETDATE());`
- 連接字符串 (`App.config` / `appsettings.json`):
``
- DAL 通用執行方法:
`SqlHelper.ExecuteNonQuery(sql, params)`, `ExecuteScalar`, `ExecuteReader` → 返回 `DataTable`/`List`。
- 註冊邏輯:
驗證用戶名唯一 → 生成隨機 Salt → `pwdHash = MD5(password + Salt)` → 入庫。
- 登錄邏輯:
查用戶 → 讀 Salt → 計算 `MD5(inputPwd + Salt)` → 比對 `PasswordHash` → 成功返回 User 對象。
- UI 跳轉:
WinForm: `new RegisterForm().ShowDialog();` / `this.Hide(); new MainForm(user).Show();`。
安全最小集
- 密碼**永不存明文**,必須鹽值 + 慢哈希 (BCrypt/PBKDF2/Argon2),MD5 僅教學演示。
- 參數化 SQL 防注入:`cmd.Parameters.AddWithValue("@u", username)`。
- 登錄失敗計數 + 鎖定、驗證碼、HTTPS (Web 端)。