本來DAY17使要與密碼學的內容有關,但是在取用網路公共資源碼時,我想先初步介紹一下加解密
檔案加密/解密自動化,是指利用程式或系統工具,自動對資料進行「加密處理」或「解密還原」的技術流程。這種自動化通常涵蓋「批次檔案處理」、「無需人工選擇」、「部分或全部資料保護」等特性,常用於企業端點安全、個人敏感資料防護、或資安防禦場景.
加密/解密自動化定義
檔案加密:指將檔案內容用密碼或金鑰轉換成無法直接讀取的密文,只能透過正確金鑰解密還原。加密常用演算法如 AES、RSA、XOR 等,能防止未授權存取與竄改.
檔案解密:是指將加密後的密文,恢復成原始明文。一般需要用正確密碼或私密金鑰,才可還原檔案內容.
自動化作業:是指利用程式腳本、自動同步工具或企業端點系統,對指定路徑、檔案群組自動批次執行加密解密處理,不需人工逐一操作。例如:進入指定資料夾即自動加密新檔案;或依規則自動將加密檔案還原。
常見自動加密觸發條件
檔案建立或修改
當指定資料夾裡新檔案建立或原檔案被修改時,系統會自動加密該檔案(如同步備份或端點防護軟體)。
例:用檔案系統監控 API (如 Windows 的 ReadDirectoryChangesW)偵測新增、編輯操作。
下載行為
當使用者下載任何檔案到指定路徑時,自動將下載檔案加密,防止未授權存取。
例:防毒軟體或企業安全代理在「Downloads」資料夾監控,發現新檔即加密。
使用者登入/登出
當特定使用者登入、登出時,批次自動加密/解密指定檔案。
例:EFS(加密檔案系統)開機、關機時自動執行相關操作。
資料備份/同步
備份或雲端同步前自動先加密所有檔案,確保雲端/遠端資料安全。
例:多數雲端硬碟(Dropbox、OneDrive)支援此類加密流程,或透過同步工具腳本。
規則策略或安全政策啟動
依照企業政策或資安軟體規則,自動批次觸發資料加密,包含自動排程、特定條件(IP、時間)等。
例:TrendMicro、Kaspersky防毒設定的「檔案加密規則」。
手動或程式化命令執行
使用者點擊按鈕、執行特定指令時自動加密(如「一鍵加密」、「文件解密」)。
例:Windows應用程式GUI、Shell腳本等。
高階自動化流程設計
可配合時段、網路狀態、裝置連線等狀態,動態決定自動加密觸發點。
透過系統 API 或第三方監控元件實現即時、批次或排程加密處理。
所以我們今天就是要用Windows應用程式GUI進行手動命令執行(也會撰寫一些有關xor的語法)
1.打開visual studio(選擇桌面視窗C++ Win32應用程式)
2.開好專案建新方案main.cpp
請注意後面寫的程式語言會跟視窗規定有關係,所以先將【專案】打開,並至屬性檢查
確認「連結器」→「系統」→「子系統」是「Windows (/SUBSYSTEM:WINDOWS)」
確認「C/C++」→「語言」中,C++語言標準至少為 C++17 / C++20。
3.程式碼開始
#include <windows.h>
#include
#include
// 加密或解密單一檔案(XOR 用同一函數)
void EncryptDecryptFile(const std::wstring& filename) {
std::fstream fs(filename, std::ios::in | std::ios::out | std::ios::binary);
if (!fs) {
MessageBox(NULL, L"無法開啟檔案!", L"錯誤", MB_OK | MB_ICONERROR);
return;
}
char ch;
while (fs.get(ch)) {
ch = ch ^ 0xFF; // XOR 0xFF 位元反轉
fs.seekp(-1, std::ios::cur);
fs.put(ch);
fs.flush();
}
fs.close();
}
// Windows 應用程式入口
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
int ret = MessageBox(NULL,
L"要加密文件請按「確定」,要解密請按「取消」",
L"檔案加解密",
MB_OKCANCEL | MB_ICONQUESTION);
std::wstring filepath = L"輸入自己的路徑";
if (ret == IDOK) {
EncryptDecryptFile(filepath); // 加密
MessageBox(NULL, L"檔案已加密!", L"完成", MB_OK);
}
else {
EncryptDecryptFile(filepath); // 解密 (同一函式)
MessageBox(NULL, L"檔案已解密!", L"完成", MB_OK);
}
return 0;
}
EncryptDecryptFile 函式
以二進位讀寫模式開啟指定的檔案。
檔案逐字元讀取(fs.get(ch)),對每個字元使用 ch ^ 0xFF 做 XOR 位元反轉。
使用 seekp(-1, std::ios::cur) 讓寫入指標回退一格,把加密後的字元覆寫回該位置。持續處理直到讀完整個檔案。
WinMain 函式作為執行入口
顯示訊息讓使用者選擇是加密(按「確定」)還是解密(按「取消」)。
指定固定檔案路徑(此處須注意 escape 路徑字元,否則編譯會錯誤)。
根據使用者選擇呼叫 EncryptDecryptFile 執行加密或解密。
完成後顯示訊息框通知結果。
XOR 運算(^)是簡單的加解密方法,透過對每個位元取反(0xFF 為全1字節,所有位元反轉)達到資料混淆。
加密與解密邏輯相同,因為
(x⊕k)⊕k=x。
程式中路徑 "C:\Users......." 寫法不正確,C++ 字串中 \ 需要寫成 \ 才能正確解析。
4.呈現畫面
// 加密或解密單一檔案(XOR 用同一函數)
// Windows 應用程式入口
(正常來說,駭客是不會讓你解密的!!!視窗只是僅供提醒喔~~~)
最後呈現 我的程式就被鎖住啦! 駭客可以加上遠端連線木馬加勒索可以加密你的其他重要檔案,導致重要資料被奪取!