用c语言写一个程序,要求如下:输入一个任意长度可见字符串组成的字符串,并随机生成一个等长度的随机密钥并保存在文件中,采用按位异或的方式进行二进制加密,并将该加密结果保存在一个文件中,解密时课导入该密文和密钥进行解密,将解密结果进行输出。
时间: 2024-05-14 15:13:04 浏览: 94
好的,这个问题是一个关于编程的问题,我可以回答。下面是代码实现:
```
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
char plain[1000]; //明文
char cipher[1000]; //密文
char key[1000]; //密钥
int len,i;
printf("请输入明文:");
gets(plain); //获取输入的明文
srand((unsigned)time(NULL)); //生成种子
len=strlen(plain); //获取明文长度
for(i=0;i<len;i++){
key[i]=rand()%26+97; //生成随机密钥
cipher[i]=plain[i]^key[i]; //按位异或加密
}
key[len]='\0'; //字符串最后一位赋值为'\0'结束符
cipher[len]='\0'; //同上
FILE *fp1,*fp2;
fp1=fopen("key.txt","w"); //将密钥保存在文件中
fprintf(fp1,"%s",key);
fclose(fp1);
fp2=fopen("cipher.txt","w"); //将密文保存在文件中
fprintf(fp2,"%s",cipher);
fclose(fp2);
printf("加密成功,密钥已保存在key.txt文件中,密文已保存在cipher.txt文件中。\n");
fp1=fopen("key.txt","r"); //从文件中读取密钥
fgets(key,len+1,fp1);
fclose(fp1);
fp2=fopen("cipher.txt","r"); //从文件中读取密文
fgets(cipher,len+1,fp2);
fclose(fp2);
printf("解密结果为:");
for(i=0;i<len;i++){
plain[i]=cipher[i]^key[i]; //解密
printf("%c",plain[i]);
}
plain[len]='\0'; //同上
printf("\n");
return 0;
}
```
希望这可以回答你的问题。
阅读全文