首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言實作:模擬三次密碼輸入驗證

     編輯:關於C

登入系統核心:三次密碼錯誤鎖定機制

模擬真實登入系統的密碼驗證流程:最多允許 3 次嘗試,成功則進入系統,失敗則退出。這是系統安全基礎模組。

完整程式碼

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_ATTEMPTS 3
#define CORRECT_PASSWORD "123456"
#define MAX_INPUT_LEN 20

int main() {
    char input[MAX_INPUT_LEN];
    int attempt = 0;
    int authenticated = 0;
    
    printf("=== 系統登入 ===\n");
    
    while (attempt < MAX_ATTEMPTS) {
        printf("請輸入密碼 (剩餘 %d 次機會): ", MAX_ATTEMPTS - attempt);
        
        if (scanf("%19s", input) != 1) {
            printf("輸入錯誤,請重試。\n");
            while (getchar() != '\n'); // 清理緩衝區
            continue;
        }
        
        if (strcmp(input, CORRECT_PASSWORD) == 0) {
            printf("\n✅ 登入成功!歡迎使用系統。\n");
            authenticated = 1;
            break;
        } else {
            attempt++;
            if (attempt < MAX_ATTEMPTS) {
                printf("❌ 密碼錯誤,請重新輸入。\n\n");
            }
        }
    }
    
    if (!authenticated) {
        printf("\n🔒 密碼錯誤超過 %d 次,系統鎖定。\n", MAX_ATTEMPTS);
        printf("請聯繫管理員解鎖或稍後再試。\n");
    }
    
    // system("pause"); // 僅 Windows,建議移除以提高可移植性
    return 0;
}

關鍵設計要點

  1. 輸入長度限制:%19s 防止緩衝區溢位(陣列大小 20,留 1 給結束符)
  2. scanf 回傳值檢查:確保成功讀取 1 個項目
  3. 緩衝區清理:輸入失敗時清除殘留字符,避免無限迴圈
  4. 常數化配置:密碼、最大嘗試次數、緩衝區大小皆用宏定義,易於維護

與前一範例 (ID 667) 的差異比較

特性ID 667 版本本版本 (ID 670)
輸入函數fgets (整行)scanf (單詞)
空格處理支援密碼含空格遇空格截斷
緩衝區保護fgets 自帶長度限制手動指定 %19s
適用場景複雜密碼策略簡單英數密碼

安全性增強建議

  • 密碼不應硬編碼,應讀取配置檔或環境變數
  • 實作指數退避:第 1 次失敗無延遲,第 2 次 sleep(1),第 3 次 sleep(3)
  • 記錄失敗嘗試日誌(IP、時間、用戶名)供稽核
  • 生產環境務必使用雜湊比對(bcrypt/Argon2),不可明文比較
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved