C C 混編的命令列加密工具

2021-06-21 10:07:06 字數 2701 閱讀 8112

前段時間寫了乙個基於mfc的檔案加密器,不過最近徹底把工作轉移到了linux系統,就再寫了乙個基於命令列的檔案加密器。一開始我是想用純c來寫的,但在檔案的讀寫上遇到了問題,於是就借用了c++的檔案輸入輸出流。

在加密處理上依舊走最簡單的路線,這次甚至沒有對輸入的密碼進行處理,而直接與檔案進行異或達到加密目的。也沒有對整個檔案進行加密,因為那樣太浪費時間了,加密大檔案時會等到蛋疼。略懂計算機的人都知道,乙個檔案的檔案頭包含了很多檔案的基本資訊,因此,只要把檔案頭破壞掉,軟體就不能正確讀取檔案資訊。我的做法是先用輸入的密碼與檔案頭開始進行數十萬次的加密處理,剩下的部分再分成數百萬份,也就是在每隔百萬分之一檔案大小的地方進行一次加密。這樣在處理大檔案的效率就跟上來了,一般數百mb以上的檔案在處理時間上都不會有太大差異,就算配置差一點的電腦,10秒內也應該可以完成。

下面是**(單檔案,c++編譯器可編譯)。

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef struct tailtails;

void printhelpinfo()

int main(int argc,char *argv)

if(n==1) //沒有任何引數,顯示幫助資訊

for(i = 0 ; i

if(strcmp(com[1],」-h」)==0 && n==2 ) //-h引數,顯示幫助資訊

if(strcmp(com[1],」-f」)==0)

filepath = (char *)malloc(128);

filepath = com[2];

fstream file;

file.open(filepath,ios::in|ios::out|ios::binary);

if(!file)

file.seekg(0,ios::end);

streampos ps = file.tellg();

filesize = (unsigned long long )ps;

cout<<」檔案大小:」<

tailsize = – tailsize;

file.seekg(tailsize,ios::end);

tailsize = -tailsize;

file.read((char *)(&tailr),tailsize);

cout<<」檔案狀態:」;

if(strcmp((char *)tail.head,(char *)tailr.head)==0 && strcmp((char *)tail.tail,(char *)tailr.tail)==0 )

cout<<」已加密\n」;

else cout<<」未加密\n」; return 0; } if(strcmp(com[1],」-p」)==0 && n >= 4) //用密碼加密檔案

start = clock();

fstream file;

file.open(filepath,ios::in|ios::out|ios::binary);

if(!file)

//檢查檔案是否加密

tailsize = – tailsize;

file.seekg(tailsize,ios::end);

tailsize = -tailsize;

file.read((char *)(&tailr),tailsize);

if(strcmp((char *)tail.head,(char *)tailr.head)==0 && strcmp((char *)tail.tail,(char *)tailr.tail)==0 ) //已加密

file.seekg(0,ios::end);

streampos ps = file.tellg();

filesize = (unsigned long long )ps;

if(iscip)

filesize -= tailsize;

cout<<」原始檔大小:」<

printf(「正在處理檔案頭…\n」);

count = filesize / blocksize;

for(i = 0 ; i 500000) break;

file.seekg(blocksize*i,ios::beg);

file.read((char *)block,blocksize);

for(k=0;k

file.seekp(blocksize*i,ios::beg);

file.write(block,blocksize);

// cout<

}cout<<」正在對檔案進行處理…\n」;

i++;

for(;i

file.seekp(blocksize*i,ios::beg);

file.write(block,blocksize);

i = i + (filesize/5000000);

}if(!iscip)

else

finish = clock();

cout<<」用時」<<(finish-start)/1000<<」ms」<

return 0;

}printhelpinfo();

return 0;

}

命令列工具

在wince6.0 中,在vs2005 的 build 選單中,有乙個 advanced build commands 其中有很多編譯選項 sysgen 相當於執行命令 blddemo q 一般第一次編譯或者是 改變了 catalog 中的item 的時候,就用這個了。clean sysgen 相當...

命令列工具

執行 scws h 可以看到詳細幫助說明。usage scws options i input o output i string file 要切分的字串或檔案,如不指定則程式自動讀取標準輸入,每輸入一行執行一次分詞 o file 切分結果輸出儲存的檔案路徑,若不指定直接輸出到螢幕 c charse...

c mysql命令列 mysql 命令列工具

1 mysql命令選項 2 mysql命令 3 mysql日誌 4 mysql服務端幫助 5 執行mysql指令碼 6 使用技巧 mysql是乙個能夠編輯輸入行的簡單sql shell,支援互動式和非互動式訪問。使用互動式時,查詢結果以ascii表的格式展示。使用非互動式時,查詢結果以製表符分隔的格...