2012-05-01 58 views
0
#include <stdio.h> 
#include <string.h> 
#include <cstdlib> 

const int KEY=118; 

int main() 
{ 
    FILE* hOFile = fopen("file1","w"); 
    FILE* hIFile; 
    char sign; 

    for(int i=254; i>=0; i--) 
    fprintf(hOFile,"%c",i); 

    fclose(hOFile); 

    hIFile = fopen("file1","r"); 
    hOFile = fopen("file2","w"); 

    for(int i=254; i>=0; i--) 
    { 
     fscanf(hIFile,"%c",&sign); 
     fprintf(hOFile,"%c",(sign^KEY)); 
    } 

    fclose(hIFile); 
    fclose(hOFile); 

    hIFile=fopen("file2","r"); 
    hOFile=fopen("file3","w"); 

    for(int i=254; i>=0; i--) 
    { 
     fscanf(hIFile,"%c",&sign); 
     fprintf(hOFile,"%c",(sign^KEY)); 
    } 

    fclose(hIFile); 
    fclose(hOFile); 
} 

我的意思是file3與file1相同。不幸的是,ASCII KEY-9 character.To後file3的崩潰具體地,在這個例子中:使用XOR在一個程序中對文件進行編碼和解碼

File1中:

ţýüűúůř÷öőôóňńđďîíěëęéčçćĺäăâáŕßŢÝÜŰÚŮŘ×ÖŐÔÓŇŃĐĎÎÍĚËĘÉČÇĆĹÄĂÂÁŔżľ˝Ľ»SA·¶μ'ł˛±°Z →«»«»«'''ŹŽŤŚ†‡†...「,€〜} | {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA @?> = < ;:/.-,+*)('&%$#「!

File3 :

ţýüűúůř÷öőôóňńđďîíěëęéčçćĺäăâáŕßŢÝÜŰÚŮŘ×ÖŐÔÓŇŃĐĎÎÍĚËĘÉČÇĆĹÄĂÂÁŔżľ˝Ľ»SA·¶μ'ł˛±°Ż®¬«Ş©¨§|Ą¤Ł˘źžťś> S™ - •」「 '' ŹŽŤŚ

回答

3

你在讀二進制模式(rb,不r)打開文件和寫二進制模式(wb,不只是w) ,否則系統會嘗試做一些轉換對於你不想要的東西。

+0

它的工作原理,但我不知道它爲什麼沒有在文本模式:( – 0x6B6F77616C74

+0

@ kutacz就像我說的,系統執行轉換(例如,它將轉換換行符爲您的系統使用)當您使用二進制數據進行加密時,不希望發生這種情況。 –

相關問題