m0_59771900 2021-06-30 16:27 采纳率: 0%
浏览 101

c语言文件读写和加密解密怎么做

1、文件加密程序:将待加密文件以二进制打开,读入32个字节,分别与口令异或,在将4、5、6三个字分别与0xaaaa异或,即完成加密,执行第二次就解密。 这道题怎么做啊?

  • 写回答

1条回答 默认 最新

  • CSDN专家-黄老师 2021-06-30 16:28
    关注
    #include<stdio.h>
    #include<stdlib.h>
     
    int main(int argc,char *argv[])
    {
        FILE *fpr,*fpw;//注意  FILE 为全大写 
        
        char ch,key=0xfa;//初始密钥 
        //命令行参数必须是3个,且第3个参数必须是+/-
        if(argc!=3 || *argv[2]!='+'&& *argv[2]!='-') 
        {
            printf("usage: 可执行文件名  文件名  +/-");
            return 0; 
        } 
        //以读二进制文件的方式打开指定文件 
        if((fpr=fopen(argv[1],"rb"))==NULL)
        {
            printf("cannot open this file");
            return 0;
         } 
         //以读写二进制文件的方式打开指定文件
         //因为会不断对fpw进行写操作【逐字符写】,
         //为避免后一次写操作覆盖了前一次内容,不可使用"w+" 
         if((fpw=fopen(argv[1],"rb+"))==NULL) 
         {
             printf("cannot open file");
             return 0;
         }
         
         //逐字符读取文件fpr中,直至到达文件尾(EOF表示文件尾,值为-1)
         while((ch=fgetc(fpr))!=EOF) 
         {
             //将读取到的字符加密【与k按位异或】后写到文件fpw中 
             fputc(ch^key,fpw);
            /*
            当第三个参数为+【加密】时,
            更新密钥key=ch,使对下一个字符的加密密钥总是前一个字符
            当第3个参数为-【解密】时,
            更新key=ch^k,反向操作,使fputc()中有(ch^k)^k=ch,达到解密的目的 
            */ 
            key=(*argv[2]=='+')?ch:ch^key;
         } 
         fclose(fpr);
         fclose(fpw);
         return 0;
     } 
    

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

    评论

报告相同问题?