C 實現的乙個加密檔案的程式

2021-10-02 22:53:46 字數 4242 閱讀 7266

近來寫了乙個有關加密文字的加密程式,基本原理是將檔案中所有位元組和指定的密碼逐字節進行異或,一般檔案內容遠遠長於密碼,那麼可以擴充套件密碼為:123456123456…這種迴圈的形式,直到和原檔案相同的長度。這樣所有檔案的內容對被密碼加密了,而且由於異或的特性,只需要再執行一下加密的過程,原檔案內容就可以被恢復。

下面寫一下實現的具體功能,主要函式和效果:

程式可以將程式檔案所在資料夾以及子資料夾下,所有字尾為txt和docx的檔案進行加密,加密檔案字尾變為txtenc,docxenc如果存在需要加密的檔案則進行加密(加密檔案和未加密檔案都在資料夾下時也進行加密),如果所有txt和docx檔案都是加密檔案,那就通過像使用者詢問密碼來確認是否解密。

vector file_set;
這裡定義了乙個字串陣列,來儲存資料夾下所有滿足要求的檔名。

void

handle_all_file

(string path, vector

&file_set)

elseif(

compare_file_name

(fileinfo.name,

".txtenc")||

compare_file_name

(fileinfo.name,

".docxenc"))

}while

(_findnext

(hfile,

&fileinfo)==0

);_findclose

(hfile)

;return

;}

這裡通過結構體_finddata_t來列出所有檔名,它的使用參考了

compare_file_name是對檔名字尾簡單判斷,存在符合要求的未加密檔案時,讓乙個全域性bool變數encry賦予值true,用於判斷執行加密過程還是解密。這個函式將加密檔案和未加密檔案都挑選出來,所以後繼需要根據encry的值判斷是對加密檔案解密還是對未加密檔案加密。

void

encry_deencry

(vector

&file)

; cin>>tempkey;if(

strcmp

(tempkey, key)!=0

)return

;else

}for

(vector

::iterator filei=file.

begin()

; filei != file.

end();

++filei)

}

這個函式是詢問密碼判斷密碼是否正確,再度挑選出合適的檔案,進行處理。

int

handle_one_file

(string path)

else

cout << path1 <<

"------"

<< path2 << endl;

file *f =

fopen

(path1.

c_str()

,"rb");

file *fw =

fopen

(path2.

c_str()

,"wb");

const

int buffer_size =

1024

;int read_size =0;

char buffer[

1024+1

]=;int i;

memset

(buffer,

0, buffer_size+1)

;while

(read_size =

fread

(buffer,

sizeof

(char

), buffer_size, f)

)fwrite

(buffer,

sizeof

(char

), read_size, fw);}

fclose

(f);

fclose

(fw)

;remove

(path1.

c_str()

);return0;

}

通過c語言的fopen,fread,fwrite,讀出檔案然後通過key[i%strlen(key)]迴圈地用密碼取異或原始檔案內容。

效果如下:

完整**如下:

#include

#include

#include

#include

#include

#include

#include

using namespace std;

char key=

"123456"

;bool encry = false;

bool compare_file_name

(const

char

*s,char

*den)

inthandle_one_file

(string path)

else

cout << path1 <<

"------"

<< path2 << endl;

file *f =

fopen

(path1.

c_str()

,"rb");

file *fw =

fopen

(path2.

c_str()

,"wb");

const

int buffer_size =

1024

;int read_size =0;

char buffer[

1024+1

]=;int i;

memset

(buffer,

0, buffer_size+1)

;while

(read_size =

fread

(buffer,

sizeof

(char

), buffer_size, f)

)fwrite

(buffer,

sizeof

(char

), read_size, fw);}

fclose

(f);

fclose

(fw)

;remove

(path1.

c_str()

);return0;

}void

encry_deencry

(vector

&file)

; cin>>tempkey;if(

strcmp

(tempkey, key)!=0

)return

;else

}for

(vector

::iterator filei=file.

begin()

; filei != file.

end();

++filei)

}void

handle_all_file

(string path, vector

&file_set)

elseif(

compare_file_name

(fileinfo.name,

".txtenc")||

compare_file_name

(fileinfo.name,

".docxenc"))

}while

(_findnext

(hfile,

&fileinfo)==0

);_findclose

(hfile)

;return;}

intmain()

C 非對稱加密的乙個程式

using system using system.drawing using system.collections using system.componentmodel using system.windows.forms using system.data using system.io us...

C 非對稱加密的乙個程式

using system using system.drawing using system.collections using system.componentmodel using system.windows.forms using system.data using system.io us...

C 寫乙個簡單的加密程式

des對稱加密,是一種比較傳統的加密方式,其加密運算 解密運算使用的是同樣的金鑰,資訊的傳送者和資訊的接收者在進行資訊的傳輸與處理時,必須共同持有該密碼 稱為對稱密碼 是一種對稱加密演算法。des 使用乙個 56 位的金鑰以及附加的 8 位奇偶校驗位,產生最大 64 位的分組大小。這是乙個迭代的分組...