XOR暗号を使ってファイルの暗号化と復号化をしたいのですが、テキストファイル以外でうまくいきません
コード:
#include <stdio.h>
#include <string.h>
#include <sys/file.h>
#define key 1234
#define SIZE 16
int main()
{
int i;
char str[SIZE];
fpos_t ft;
FILE *fp;
fp = fopen("test.dat", "rb");
FILE *file;
file = fopen("test2.dat","wb");
int j = 0;
while(1){
memset(str, 0, sizeof(str));
fseek(fp, j, SEEK_SET);
fread(str, SIZE-1, 1, fp);
for(i=0; i<strlen(str); i++){
fprintf(file, "%c", (char)(str[i] ^ key));
printf("%c", str[i]);
}
if(str[i+1]=='\0'){puts("a"); break;}
//if(feof(fp)){printf("aaa"); break;}
j += 15;
}
fclose(fp);
fclose(file);
return 0;
}
小さめのテキストファイルでしか試してませんが、テキストファイルの場合はこのコードで暗号化復号化できます。
画像ファイルや実行ファイルで試すとうまくいきません。
このまま1.1MBくらいの画像ファイルで動かしてみると120バイトのファイルが出力されて、コメントアウトしてるif文に切り替えると1MBのファイルが出力されました。
どうすればいいと思いますか?