流式加密
输入一个任意长度可见字符串组成的字符串,并随机生成一个等长度的随机密钥并保存在文件中,采用按位异或的方式进行二进制加密,并将该加密结果保存在一个文件中,解密时导入该密文和密钥进行解密,将解密结果进行输出。
代码如下,如有帮助,请帮忙采纳一下,谢谢。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char mw[100]={0},my[100]={0},jmp[100]={0},jmn[100]={0};
int i,j,n;
FILE* fp;
srand((unsigned int)time(NULL));
printf("请输入明文:");
gets(mw); //读取明文
i=0;
while(mw[i])
{
n = 33+ rand()%80; //生成0-79的随机数,密钥使用可见字符部分的字符
my[i] = n;
//加密后的字符
jmp[i] = mw[i] ^ my[i];
i++;
}
printf("密钥字符:%s\n",my);
printf("加密后字符:%s\n",jmp);
if((fp= fopen("my.in","wb")) == 0)
{
printf("文件打开错误\n");
return 0;
}
//密钥和加密后的内容写入文件
my[i] = '\n';
fwrite(my,1,i+1,fp);
fwrite(jmp,1,i,fp);
fclose(fp);
//打开文件读取
fp = 0;
fp=fopen("my.in","rb");
if(fp == 0)
{
printf("文件打开失败");
return 0;
}
memset(my,0,100);
memset(jmp,0,100);
fgets(my,100,fp);
fgets(jmp,100,fp);
fclose(fp);
n = strlen(my);
if(my[n-1] == '\n') my[n-1] = 0;
printf("读取的密钥字符:%s\n",my);
printf("读取的加密后字符:%s\n",jmp);
//解密
i=0;
while(my[i])
{
jmn[i] = my[i] ^ jmp[i];
i++;
}
printf("解密后字符:%s\n",jmn);
return 0;
}