近來寫了乙個有關加密文字的加密程式,基本原理是將檔案中所有位元組和指定的密碼逐字節進行異或,一般檔案內容遠遠長於密碼,那麼可以擴充套件密碼為: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 位的分組大小。這是乙個迭代的分組...