2012-05-01 47 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就像我说的,系统执行转换(例如,它将转换换行符为您的系统使用)当您使用二进制数据进行加密时,不希望发生这种情况。 –

相关问题