用或运算符对文件的加密解密
1.文件加密解密系统;加密解密原理:通过位运算符异或“^”实现
原文件 密钥 加密后的文件
我写的代码运行时我输入一个字符串,然后用六位数字字符去加密,解密之后,得到的字符串和原来的字符串相比,少了第一个字符
这是我运行的情况:
文件打开成功!
1.加密
2.解密
3.结束
请输入想要执行功能的序号:1
请输入原文件:qwqreqwr
请输入密钥:123456
已加密!
1.加密
2.解密
3.结束
请输入想要执行功能的序号:2
请输入密钥:123456
wqreqwr
求路过的大神指点.
这是我写的代码:
#include<stdio.h>
#include<stdlib.h>
void jiemi(FILE *fp,FILE *fp1);
void jiami(FILE *fp,FILE *fp1);
int main(int argc,char *argv[])
{
FILE *fp,*fp1;
fp=fopen(argv[1],"w+");
fp1=fopen(argv[2],"w+");
if(fp==NULL||fp1==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
else
{
printf("文件打开成功!\n");
}
while(1)
{
char n;
printf("1.加密\n");
printf("2.解密\n");
printf("3.结束\n");
loop:
printf("请输入想要执行功能的序号:");
scanf("%c",&n);
if(n<='0'||n>'3')
{
printf("输入的序号错误,请重新输入:\n");
goto loop;
}
switch(n)
{
case 49:jiami(fp,fp1);break;
case 50:jiemi(fp,fp1);break;
case 51:goto sloop;
}
}
sloop:
if(fclose(fp)==0&&fclose(fp1)==0)
{
printf("文件关闭成功!\n");
}
else
{
printf("文件关闭失败!\n");
}
return 0;
}
void jiami(FILE *fp,FILE *fp1)
{
int i,j=0;
char a[30],sum;
char num[6];
printf("请输入原文件:");
scanf("%s",a);
fprintf(fp,"%s",a);
rewind(fp);
printf("请输入密钥:");
scanf("%s",num);
for(i=0;;i++)
{
sum=a[i]^num[j];
j++;
fputc(sum,fp1);
if(j==5)
j=0;
if(a[i]=='\0'&&j==0)
break;
}
rewind(fp1);
printf("已加密!\n");
}
void jiemi(FILE *fp,FILE *fp1)
{
int i=0,j=0;
char a;
char num[6];
printf("请输入密钥:");
scanf("%s",num);
while(1)
{
a=fgetc(fp1)^num[i];
i++;
if(i==5)
i=0;
printf("%c",a);
if(feof(fp1)!=0)
{
break;
}
}
printf("\n");
}