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

C 語言密碼加解密實戰:配置文件敏感資訊保護方案

     編輯:關於C語言

場景痛點

實際專案中,資料庫密碼、FTP 憑證、API Key 等敏感資訊不可明文寫入配置文件(.ini, .json, .yaml)。需在部署時加密、運行時解密,且不修改業務代碼邏輯。

整體架構流程

  1. 部署階段:明文密碼 → 加密工具 → 密文 → 寫入 Config.ini
  2. 啟動階段:讀取 Config.ini → 檢測加密標誌 → 解密 → 內存中得到明文 → 業務模塊使用
  3. 標誌位設計:iDecryptFlag=0 表示配置為密文(首次部署);=1 表示已解密(後續啟動跳過)

核心加解密演算法(對稱加密示例)

// 簡單異或加密(生產環境請用 AES-256-GCM 等標準算法)
void xor_crypt(char *data, int len, const char *key, int keylen) {
    for (int i = 0; i < len; i++) {
        data[i] ^= key[i % keylen];
    }
}

// 加密:明文 → Base64(密文) 存入配置
char* encrypt_password(const char *plain, const char *key) {
    int len = strlen(plain);
    char *buf = malloc(len + 1);
    strcpy(buf, plain);
    xor_crypt(buf, len, key, strlen(key));
    char *b64 = base64_encode(buf, len);  // 需實現或引用庫
    free(buf);
    return b64;  // 調用者負責 free
}

// 解密:配置讀取 → Base64解碼 → 異或 → 明文
char* decrypt_password(const char *b64, const char *key) {
    int len;
    char *buf = base64_decode(b64, &len);
    xor_crypt(buf, len, key, strlen(key));
    buf[len] = '\0';
    return buf;
}

配置文件示例 Config.ini

[Database]
Host=127.0.0.1
Port=3306
User=app_user
Password=U2FsdGVkX1+...  # Base64 編碼的密文
Encrypted=1             # 1=已加密, 0=明文(首次部署時)

程式啟動流程圖

加解密總體流程

示例程序流程

執行結果對比

階段iDecryptFlag配置文件 Password 欄位內存中實際值
首次部署0明文 mysecret明文
首次啟動0→1自動加密為密文明文(解密後)
後續啟動1密文明文(解密後)

Flag=0 時執行結果 Flag=1 時執行結果

安全強化建議

  • 算法升級:採用 AES-256-GCM(認證加密),防範竄改
  • 金鑰管理:金鑰勿硬編碼,透過環境變數、HSM、KMS 注入
  • 完整性校驗:配置文件簽名(HMAC),防止惡意修改
  • 記憶體保護:使用後 memset_s 清零敏感緩衝區,mlock 防止換出到交換分區
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved