當前位置:成語大全網 - 書法字典 - 用異或算法加密的文件能被破解嗎?

用異或算法加密的文件能被破解嗎?

讓我們用窮舉法嘗試破解這樣加密的文件。假設有壹個疑似加密文件animation.cfg,用Winhex打開這個文件,如圖6-1。()圖6-1打開疑似用Winhex加密的文件animation.cfg。觀察圖6-1中的十六進制數據和十六進制數據右側顯示的ASCII值,初步推斷該文件包含UNICODE編碼的中國漢字,因為第壹行的16十六進制數據是按照UNICODE編碼的。兩個字節解析壹個漢字得到“line”,但是根據文件名“animation.cfg”猜測這是壹個動畫配置文件,因為“animation”可以翻譯成動畫,“cfg”多為“config”。那麽動畫配置文件應該存儲與動畫數據相關的數據。中國漢字如何存儲?加密了嗎?如果是加密的,用的是哪種加密方式?從最簡單的異或加密開始,寫壹個程序。這個程序的作用如下:讀取animation.cfg文件中前16字節的內容,然後用0到255之間的任意值和animation.cfg文件中提取的16字節(實際上可以提取更多的字節進行比較,這裏只提取文件的前16字節進行異或運算。最後將這256組異或數據放在壹起進行比較,看哪組數據經過異或運算後看起來更有意義,而不是垃圾數據。按照上面的思路寫下面的C語言代碼:# include

# include & ltwindows.h & gt

主()

{

FILE *fp,* fp2

int i,j;//i用來記錄0到255之間的任意數,J用來記錄當前異或的字節位置。

byte *buffer,*buffer1,*buffer2,* buffer 3;//指針buffer和buffer1組合成buffer2。

//和緩沖器3

//壹個組,緩沖區指針會變,緩沖區生產會壹直指向。

buffer的第壹個字節位置,與buffer2和buffer3相同。

//理查德

buffer =(byte *)malloc(16);//將16字節分配到緩沖區指向的位置。

buffer 2 =(byte *)malloc(16 * 256);//將16*256字節分配給buffer2指向的位置。

fp = fopen("animation.cfg "," Rb ");//打開可疑的加密文件。

buffer3 = buffer2//緩沖區3保存緩沖區2的初始地址。

for(I = 0;我& lt=255;i++)

{

buffer 1 =緩沖區;//buffer1保存緩沖區的初始地址。

fseek(fp,0,0);//重新定位到animation.cfg文件的開頭。

fread(buffer1,16,1,FP);//將animation.cfg文件的前16字節讀入緩沖區。

for(j = 0;j & lt16;j++)

{

*buffer1=*buffer1^i;//animation.cfg文件中的第壹個字節介於0和255之間。

//任意數值異或,結果保存在buffer1指示的位置。

* buffer 2 = * buffer 1;//將buffer1指向的數據復制到buffer2指向的位置。

緩沖區1 =緩沖區1+1;//buffer1指針加1,準備讀取下壹個數據。

緩沖器2 =緩沖器2+1;//buffer2指針加1,準備存儲下壹個數據。

}

}

fp2 = fopen("test "," w b+ ");//打開壹個二進制文件,準備向其中寫入數據。

fwrite(buffer3,16*256,1,fp2);//緩沖區3保存緩沖區2的初始地址。這份聲明將

//由//buffer2的初始地址指示的數據以二進制形式寫入。

//16×256字節

fclose(fp2);//關閉文件句柄

fclose(FP);

}