需求:以DWORD為單位對檔案進行加密,將每個DWORD與0xfcba0000做異或,寫入另一個檔案
解答:#include <stdio.h>
#include <stdlib.h>
#define DWORD unsigned long
#define BYTE unsigned char
#define false 0
#define true 1
int main(int argc, char *argv[])
{
FILE *hSource;
FILE *hDestination;
DWORD dwKey=0xfcba0000;
char* pbBuffer;
DWORD dwBufferLen=sizeof(DWORD);
DWORD dwCount;
DWORD dwData;
if(argv[1]==0||argv[2]==0)
{
printf("missing argument!\n");
return false;
}
char* szSource=argv[1];
char* szDestination=argv[2];
hSource = fopen(szSource,"rb");// 開啟源檔案.
hDestination = fopen(szDestination,"wb"); //開啟目標檔案
if (hSource==NULL) {printf("open Source File error !"); return false ;}
if (hDestination==NULL){ printf("open Destination File error !"); return false ;}
//分配緩衝區
pbBuffer=(char* )malloc(dwBufferLen);
do {
// 從源檔案中讀出dwBlockLen個位元組
dwCount = fread(pbBuffer, 1, dwBufferLen, hSource);
//加密資料
dwData = *(DWORD*)pbBuffer; //char* TO dword
dwData^=dwKey; //xor operation
pbBuffer = (char *) &dwData;
// 將加密過的資料寫入目標檔案
fwrite(pbBuffer, 1, dwCount, hDestination);
} while(!feof(hSource));
//關閉檔案、釋放記憶體
fclose(hSource);
fclose(hDestination);
printf("%s is encrypted to %s\n",szSource,szDestination);
return 0;
}
心得:
char*轉DWORD:dwData = *(DWORD*)pbBuffer;
DWORD轉char*:pbBuffer = (char *) &dwData;