流式加密
输入一个任意长度可见字符串组成的字符串,并随机生成一个等长度的随机密钥并保存在文件中,采用按位异或的方式进行二进制加密,并将该加密结果保存在一个文件中,解密时课导入该密文和密钥进行解密,将解密结果进行输出。
就是对应字符进行异或就好了啊
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char s[100001] = {0};
char m[100001] = {0};
char s1[100001] = {0};
char m1[100001] = {0};
int main(){
gets(s);
int len = strlen(s);
int n = 0;
srand(time(NULL));
for(int i=0;i<len;i++)
{
m[n] = rand()%256;
s[i] = s[i] ^ m[n];
n++;
}
FILE *fp1 = fopen("D:\\m.dat","w");
fwrite(m,1,len,fp1);
fclose(fp1);
//
FILE *fp2 = fopen("D:\\data.dat","w");
fwrite(s,1,len,fp2);
fclose(fp2);
//
FILE *fp3 = fopen("D:\\m.dat","r");
fread(m1,1,100001,fp3);
fclose(fp3);
//
FILE *fp4 = fopen("D:\\data.dat","r");
fread(s1,1,100001,fp4);
fclose(fp4);
//
len = strlen(s1);
for(int i=0;i<len;i++)
s1[i] = s1[i] ^ m[i];
printf("%s\n",s1);
return 0;
}
做两次异或运算可以得到原值:a^b^b=a