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

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

     編輯:關於C

背景痛點

軟件項目中常需存儲數據庫密碼、FTP 憑證等敏感信息。明文寫入配置文件極不安全,一旦文件洩露後果嚴重。本文演示一套完整的「配置文件加密存儲 → 運行時解密使用」方案。

整體流程

  1. 開發階段:將明文密碼通過加密工具生成密文
  2. 部署階段:將密文寫入配置文件(如 Config.ini)
  3. 運行階段:程序讀取配置,調用解密函數還原明文供業務使用

加解密總體流程圖

圖1 加解密總體流程

示例程序設計

為驗證流程,設計一個帶開關的演示程序:

  • iDecryptFlag = 0:讀取配置 → 解密 → 顯示明文 → 將密文寫回配置(模擬首次部署加密)
  • iDecryptFlag = 1:讀取配置 → 解密 → 顯示明文 → 不修改配置(正常運行模式)

示例程序流程圖

圖2 示例程序流程

配置文件示例

Config.ini 內容結構:

[Database]
Password=EncryptedStringHere

配置文件內容

圖3 配置文件內容

運行效果驗證

模式 0:首次加密寫入

iDecryptFlag=0 運行結果

圖4 iDecryptFlag=0 時的執行結果

此時配置文件中的密碼已被替換為加密後的密文。

模式 1:正常解密使用

iDecryptFlag=1 運行結果

圖5 iDecryptFlag=1 時的執行結果

密碼經歷「原文 → 密文 → 原文」完整週期,業務邏輯獲得明文密碼。

核心代碼骨架

/* 簡單異或加密演示,實際項目建議用 AES 等標準算法 */
void encrypt_decrypt(char *data, int len, const char *key) {
    int key_len = strlen(key);
    for (int i = 0; i < len; i++) {
        data[i] ^= key[i % key_len];
    }
}

int main(int argc, char *argv[]) {
    int iDecryptFlag = (argc > 1) ? atoi(argv[1]) : 0;
    char password[256] = {0};

    /* 1. 讀取配置文件獲取密文 */
    read_config("Config.ini", "Database", "Password", password, sizeof(password));

    /* 2. 解密 */
    encrypt_decrypt(password, strlen(password), "MySecretKey");

    /* 3. 業務使用明文密碼 */
    printf("解密後密碼: %s\n", password);

    /* 4. 模式 0 時將明文加密寫回配置 */
    if (iDecryptFlag == 0) {
        encrypt_decrypt(password, strlen(password), "MySecretKey");
        write_config("Config.ini", "Database", "Password", password);
    }
    return 0;
}

安全建議

  • 生產環境請使用成熟加密庫(OpenSSL、mbedTLS)實現 AES-256-GCM 等認證加密
  • 密鑰管理至關重要:可考慮硬件安全模塊(HSM)、環境變量注入、密鑰派生函數(PBKDF2)
  • 配置文件權限設置為 600,僅所有者可讀寫
  • 內存中明文使用後應立即清零(memset_s 或 explicit_bzero)

總結

通過「配置存密文、運行時解密」模式,有效降低敏感信息洩露風險。關鍵在於加密算法選型、密鑰管理體系與內存清理機制的落地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved