有沒有編譯錯誤只是功能錯誤,而在C製作一個簡單的XOR crypter
我試圖使在C簡單的XOR crypter。我發現,加密部分不是問題,因爲當XOR函數在同一個字符串上使用兩次時,它會返回我發回的確切字符串。因此,我相信這個問題並不是因爲這個加密部分,我相信寫這個文件時會出現這個問題。
功能的誤差在
int xorFile (char *infile, char *outfile) {
FILE *in,
*out;
long lSize;
char *buffer;
in = fopen (infile , "rb");
out = fopen(outfile, "wb");
if(!in) perror(infile),exit(1);
fseek(in , 0L , SEEK_END);
lSize = ftell(in);
rewind(in);
/* allocate memory for entire content */
buffer = (char*)calloc(1, lSize+1);
if(!buffer) fclose(in),fputs("memory alloc fails",stderr),exit(1);
/* copy the file into the buffer */
if(1!=fread(buffer , lSize, 1 , in))
fclose(in),free(buffer),fputs("entire read fails",stderr),exit(1);
/* do your work here, buffer is a string contains the whole text */
int i;
for(i=0;buffer[i]!='\0';i++) {
fputc(buffer[i]^XOR_KEY,out);
}
fclose(in);
free(buffer);
fclose(out);
return 0;
}
我相信導致錯誤
int i;
for(i=0;buffer[i]!='\0';i++) {
fputc(buffer[i]^XOR_KEY,out);
}
完整程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#define XOR_KEY 0x6F
int xorFile (char *infile, char *outfile) {
FILE *in,
*out;
long lSize;
char *buffer;
in = fopen (infile , "rb");
out = fopen(outfile, "wb");
if(!in) perror("blah.txt"),exit(1);
fseek(in , 0L , SEEK_END);
lSize = ftell(in);
rewind(in);
/* allocate memory for entire content */
buffer = (char*)calloc(1, lSize+1);
if(!buffer) fclose(in),fputs("memory alloc fails",stderr),exit(1);
/* copy the file into the buffer */
if(1!=fread(buffer , lSize, 1 , in))
fclose(in),free(buffer),fputs("entire read fails",stderr),exit(1);
/* do your work here, buffer is a string contains the whole text */
int i;
for(i=0;buffer[i]!='\0';i++) {
fputc(buffer[i]^XOR_KEY,out);
}
fclose(in);
free(buffer);
fclose(out);
return 0;
}
int main (int argc, char *argv[]) {
if (argc <= 2) {
fprintf (stderr, "Usage: %s [IN FILE] [OUT FILE]\n" , argv[0]) ;
exit (1);
}
xorFile (argv[1], argv[2]) ;
}
個測試的原因
- 經過多種操作系統上
- 經過在不同的文件格式
- 經過不同的權限
- 經過不同的編譯器,以及(跑出來的東西來測試)
附加信息 當我加密一份t他的源文件和解密的話,所有剩下的只是#include <std
FWIW,我運行了你的代碼,它對我來說工作得很好。輸出文件與輸入文件完全相同。 – kaylum
@TomKarzes:你的問題的第二部分不會發生。他用'calloc'(零內存)分配'lSize + 1',然後只讀'lSize'。你的問題的第一部分仍然有效。 –
什麼它不知道爲什麼它不適合我在Linux和Windows。 –