流式加密
输入一个任意长度可见字符串组成的字符串,并随机生成一个等长度的随机密钥并保存在文件中,采用按位异或的方式进行二进制加密,并将该加密结果保存在一个文件中,解密时导入该密文和密钥进行解密,将解密结果进行输出。
1条回答 默认 最新
- 技术专家团-小桥流水 2021-11-11 03:36关注
代码如下,如有帮助,请帮忙采纳一下,谢谢。
#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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用