當前位置:才華齋>計算機>C語言>

C語言如何使用異或(xor)加密或解密檔案

C語言 閱讀(2.8W)

C語言使用異或(xor)函式可以加密或解密檔案你知道嗎?你知道C語言如何使用異或(xor)加密或解密檔案嗎?下面是小編為大家帶來的'關於C語言如何使用異或(xor)加密或解密檔案的知識,歡迎閱讀。

C語言如何使用異或(xor)加密或解密檔案
  C語言如何使用異或(xor)加密或解密檔案

xor_encrypt.c

/** XOR 加密/解密檔案 */

#define TRUE 1

#define FALSE 0

#include

#include

#include

#include // 如果在/usr/include/找不到,可以在/usr/include/sys/複製過去

// 輸出資訊

void msg_log(char *str);

// 判斷檔案是否存在

int file_exists(char *filename);

// 主函式

//更多精彩內容:

int main(int argc, char *argv[]){

int keylen, index=0;

char *source, *dest, *key, fBuffer[1], tBuffer[20], ckey;

FILE *fSource, *fDest;

source = argv[1]; // 原文

dest = argv[2]; // 目的檔案

key = argv[3]; // 加密字串

// 檢查引數

if(source==NULL || dest==NULL || key==NULL){

msg_log("param errorusage:xor_encrypt source dest keye.g ./xor_encrypt 123456");

exit(0);

}

// 判斷原檔案是否存在

if(file_exists(source)==FALSE){

sprintf(tBuffer,"%s not exists",source);

msg_log(tBuffer);

exit(0);

}

// 獲取key長度

keylen = strlen(key);

fSource = fopen(source, "rb");

fDest = fopen(dest, "wb");

while(!feof(fSource)){

fread(fBuffer, 1, 1, fSource); // 讀取1位元組

if(!feof(fSource)){

ckey = key[index%keylen]; // 迴圈獲取key

*fBuffer = *fBuffer ^ ckey; // xor encrypt

fwrite(fBuffer, 1, 1, fDest); // 寫入檔案

index ++;

}

}

fclose(fSource);

fclose(fDest);

msg_log("success");

exit(0);

}

//輸出資訊

void msg_log(char *str){

printf("%s", str);

}

// 判斷檔案是否存在

int file_exists(char *filename){

return (access(filename, 0)==0);

}

這張圖如果使用php來處理需要 2秒 左右,但用C處理只需要 130毫秒。

fdipzone@ubuntu:~/C$ gcc -o xor_encrypt xor_encrypt.c

fdipzone@ubuntu:~/C$ time ./xor_encrypt 1280.jpg 1280en.jpg '@#$%^&*()_DFGHJKadsklfjasdf'

success

real 0m0.139s

user 0m0.060s

sys 0m0.070s