weixin_52956928 2021-11-11 10:50 采纳率: 100%
浏览 136
已结题

救救孩子 可以解决一个问题吗😭

流式加密
输入一个任意长度可见字符串组成的字符串,并随机生成一个等长度的随机密钥并保存在文件中,采用按位异或的方式进行二进制加密,并将该加密结果保存在一个文件中,解密时导入该密文和密钥进行解密,将解密结果进行输出。

  • 写回答

1条回答 默认 最新

  • 关注

    代码如下,如有帮助,请帮忙采纳一下,谢谢。

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 创建了问题 11月11日

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端