加密原理:在数学上有这么一个知识点:一个数a异或另一个数b等于数c。
而数c异或a等于b,数c异或b等于a。a^b=c -> c^b=a,c^a=b
我们要依据这个原理来实现我们的工程。个人感觉比较好玩,试一下:
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
void copy();
void jiami();
void jiemi();
int main()
{
int flag;
printf("请输入你的选择:0:复制,1:加密,2:解密\n");
scanf("%d",&flag);
switch(flag)
{
case 0:copy();break;
case 1:jiami();break;
case 2:jiemi();break;
default:printf("你的选择有误。\n");
}
system("pause");
return 0;
}
void copy()
{
FILE *fr,*fw;
char rname[50],wname[50] = "copy_",c;
printf("please input the file name:");
scanf("%s",rname);
strcat(wname,rname);
fr = fopen(rname,"rb");
fw = fopen(wname,"wb");
while(!feof(fr))
{
c = fgetc(fr);
fputc(c,fw);
}
}
void jiami()
{
FILE *fr,*fw;
char rname[50],wname[50] = "mf_",c;
int password;
printf("please input the file name you want to encrypt:");
scanf("%s",rname);
strcat(wname,rname);
printf("please input your password:");
scanf("%d",&password);
fflush(stdin);
fr = fopen(rname,"rb");
fw = fopen(wname,"wb");
while(!feof(fr))
{
c = fgetc(fr);
c ^= password;//异或
fputc(c,fw);
}
return;
}
void jiemi()
{
FILE *fr,*fw;
char rname[50],wname[50] = "xf_",c;
int password;
printf("please input the file name you want to decrypt:");
scanf("%s",rname);
strcat(wname,rname);
printf("please input your password:");
scanf("%d",&password);
fflush(stdin);
fr = fopen(rname,"rb");
fw = fopen(wname,"wb");
while(!feof(fr))
{
c = fgetc(fr);
c ^= password;//异或
fputc(c,fw);
}
return;
}
输出结果如下:
0:复制,之后的视频还能继续播放
1:加密,之后的视频不能播放了
2. 解密,用异或对刚才加密的视频进行解密,解密后又能继续播放了。
来看看目录下的文件:
欢迎学习!!