xorして保存するだけ。

exeへ直接のD&Dや開いてからコンソール画面にD&D、cmdから第三引数の指定とかに対応したら長くなった。


#include <stdio.h>
#include<string.h>
#include<stdlib.h>

//0:directory, 1:file
void getFileName(char *filepath,char *getname,int flag)
{
	//get size and '\' count
	int size=0,slash=0;
	for(int i=0;;i++){
		if(filepath[i]==0)break;
		size++;
		if(filepath[i]=='\\')slash++;
	}
	//1:file
	if(flag==1){
		//get file name (reverse)
		char temp[200]={};
		int j=0;
		for(int i=size-1;i>0;i--){
			if(filepath[i]=='\\')break;
			temp[j]=filepath[i];
			j++;
		}
		//put file name
		for(int i=0;;i++){
			if(j<0 || temp[j-1]=='\"'){
				getname[i]=0;
				break;
			}
			getname[i]=temp[j-1];
			j--;
		}
	}else{
		//0:directory
		int slash2=0;
		for(int i=0;;i++){
			if(filepath[i]=='\\')slash2++;
			if(slash2==slash){
				getname[i]=0;
				break;
			}
			getname[i]=filepath[i];
		}
	}
}

int main(int argc,char *argv[])
{
	int xornum=1;
	char fname[200];
	puts("D&D default:xored by 1");
	puts("format:file xornum");
	puts("example:C:\\test.txt 3");
	switch(argc){
		case 1:
			scanf("%s %d",fname,&xornum);
			break;
		case 2:
			//D&D
			strcpy(fname,argv[1]);
			break;
		case 3:
			xornum=atoi(argv[2]);
			strcpy(fname,argv[1]);
			break;
	}
	
	FILE *fp,*fp2;
	fp=fopen(fname,"rb");
	char fname2[200],fname3[200];
	getFileName(fname,fname2,0);
	getFileName(fname,fname3,1);
	strcat(fname2,"\\xored_");
	strcat(fname2,fname3);
	fp2=fopen(fname2,"wb");

	while(1){
      int in=fgetc(fp);
      if(in==EOF)break;
      in^=xornum;
      fputc(in,fp2);
	}	

	fclose(fp);
	fclose(fp2);

	return 0;
}