異或運算有一個獨特的性質:一個數值連續異或同一個鍵值兩次後,將恢復原值。即 c = a ^ b; c = c ^ b; 後 c == a。這特性構成了最簡單的對稱加密基礎。
bool XorEncrypt(void* bufPtr, unsigned int bufSize, const char* key, unsigned int keySize) {
if (!bufPtr || !key || keySize == 0) return false;
char* ptr = (char*)bufPtr;
for (unsigned int i = 0; i < bufSize; i++) {
unsigned int index = i % keySize;
ptr[i] ^= key[index];
}
return true;
}
參數說明:bufPtr 為待加密數據指針,bufSize 為數據長度,key 為密鑰指針,keySize 為密鑰長度。同一函數同時用於加密與解密。
測試代碼分別對 int、float、double 陣列執行兩次 XorEncrypt,調試截圖顯示數值經加密變亂,解密後完美還原。

同樣原理可應用於文件加密。工具截圖展示加密前後的文件內容對比。受限於內存,最大可處理文件大小取決於系統單次可申請內存上限。

注意:異或加密屬於極弱加密,極易被破解,僅供教學或非敏感場合使用。
完整軟件與源碼下載:FileEncrypt.zip