軟件項目中常需存儲數據庫密碼、FTP 憑證等敏感信息。明文寫入配置文件極不安全,一旦文件洩露後果嚴重。本文演示一套完整的「配置文件加密存儲 → 運行時解密使用」方案。
Config.ini)
圖1 加解密總體流程
為驗證流程,設計一個帶開關的演示程序:
iDecryptFlag = 0:讀取配置 → 解密 → 顯示明文 → 將密文寫回配置(模擬首次部署加密)iDecryptFlag = 1:讀取配置 → 解密 → 顯示明文 → 不修改配置(正常運行模式)
圖2 示例程序流程
Config.ini 內容結構:
[Database] Password=EncryptedStringHere

圖3 配置文件內容

圖4 iDecryptFlag=0 時的執行結果
此時配置文件中的密碼已被替換為加密後的密文。

圖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;
}
600,僅所有者可讀寫memset_s 或 explicit_bzero)通過「配置存密文、運行時解密」模式,有效降低敏感信息洩露風險。關鍵在於加密算法選型、密鑰管理體系與內存清理機制的落地。