m0_62801663 2022-01-02 15:46 采纳率: 72%
浏览 52
已结题

C语言文件加密与解密

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OFN "原文件.txt"
#define EFN "加密文件.txt"
#define DFN "解密文件.txt"
void encrypto(char str1[],char str2[])
{ FILE* fp1;
FILE* fp2;
if((fp1=fopen(str1,"rb"))==NULL)
{
printf("%s 文件打开失败!\n",str1);
return;
}
if((fp2=fopen(str2,"wb"))==NULL)
{
printf("%s 文件打开失败!\n",str2);
return;
}
char t[250][250];
int j,h,n;
printf("输入行数:");
scanf("%d",&n);
getchar();
for(j=0;j<n;j++)
{
gets(t[j]);
t[j][strlen(t[j])+1]='\0';
}
//puts(t[0]);
for(j=0;j<n;j++)
{
for(h=0;t[j][h]!='\n'&&t[j][h]!='\0';h++)
{
t[j][h]+=h+1;
}
}
printf("加密后:\n");
fclose(fp1);
fclose(fp2);
}

void decrypto(char str1[],char str2[])
{ FILE* fp1;
FILE* fp2;
if((fp1=fopen(str1,"rb"))==NULL)
{
printf("%s 文件打开失败!\n",str1);
return;
}
if((fp2=fopen(str2,"wb"))==NULL)
{
printf("%s 文件打开失败!\n",str2);
return;
}
char t[250][250];
int j,h,n;
for(j=0;j<n;j++)
{
for(h=0;t[j][h]!='\n'&&t[j][h]!='\0';h++)
{
printf("%c",t[j][h]);
}
printf("\n");
}
printf("解密后:\n");
for(j=0;j<n;j++)
{
for(h=0;t[j][h]!='\n'&&t[j][h]!='\0';h++)
{
printf("%c",t[j][h]-1-h);
}
printf("\n");
}

}

int main()
{
int choice;
while(1){
system("cls");
printf("欢迎使用文件加密系统!\n");
printf("请输入您的选择\n");
printf("1.加密文件 2.解密文件 3.退出系统\n");
scanf("%d",&choice);
while(choice != 1 && choice != 2 && choice !=3)
{
printf("输入选择有误!请重新输入:");
scanf("%d",&choice);
}
switch (choice)
{
case 1: encrypto(OFN,EFN);
break;
case 2: decrypto(EFN,DFN);
break;
case 3: printf("非常感谢您的使用!期待与您下次相见\n");

 break; 

}
}system("pause");
return 0;
}
这个代码哪里错了啊?

  • 写回答

1条回答 默认 最新

  • fuill 2022-01-02 17:12
    关注
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define OFN "D:\\原文件.txt"
    #define EFN "D:\\加密文件.txt"
    #define DFN "D:\\解密文件.txt"
    char y[650],m[650],jm[650];//分别为原文件字符,加密文件字符,解密文件字符 
    int yb=0,mb=0,jmb=0;//分别为原文件下标,加密文件下标,解密文件下标
    int h=1;//密码属性,初始为1 
    void f()
    {
        FILE* fp1;
        FILE* fp2;
        char c;
        fp1=fopen("D:\\t.txt","r");
        fp2=fopen("D:\\t2.txt","w");
        if(fp1==NULL||fp2==NULL)
        {
            printf("文件打开失败!\n");
            return;
        }
        else
        {
            while(c!=EOF)
            {
                c = fgetc (fp1);
                
                fputc(c, fp2);
            }
        }
        fclose(fp1);
        fclose(fp2);
    }
    
    void en()
    {
        FILE* fp1;
        FILE* fp2;
        
        char c;
        h=1;
        fp1=fopen("D:\\t.txt","r");
        fp2=fopen("D:\\t2.txt","w");
        
        if(fp1==NULL||fp2==NULL)
        {
            printf("文件打开失败!\n");
            return;
        }
        else
        {
            while(c!=EOF)
            {
                c = fgetc (fp1);
                y[yb]=c;yb++;
                h++;
                /*if(c==' '||c=='z'||c=='9'||c=='0'||c=='a'||c=='.')//遇到指定字符更改密码属性 
                {
                    h--;
                }*/
                fputc(c+h, fp2);
                m[mb] =c+h;mb++;
            }
            y[yb+1]='\0';
            m[mb+1]='\0';
        }
        fclose(fp1);
        fclose(fp2);
        printf("原文为:\n");
        puts(y);
        printf("密文为:\n");
        puts(m);
        
        
    }
    
    void de()
    {
        FILE* fp1;
        FILE* fp2;
        char c;
        h=1;
        fp1=fopen("D:\\t2.txt","r");
        fp2=fopen("D:\\t3.txt","w");
        
        if(fp1==NULL||fp2==NULL)
        {
            printf("文件打开失败!\n");
            return;
        }
        else
        {
            while(c!=EOF)
            {
                c = fgetc (fp1);
                y[yb]=c;yb++;
                h++;
                /*if(c==' '||c=='z'||c=='9'||c=='0'||c=='a'||c=='.')//遇到指定字符重置密码属性 
                {
                    h--;
                }*/
                fputc(c-h, fp2);
                jm[jmb] =c-h;jmb++;
            }
            //y[yb+1]='\0';
            jm[jmb+1]='\0';
        }
        fclose(fp1);
        fclose(fp2);
        
        printf("密文为:\n");
        puts(m);
        printf("解密文为:\n");
        puts(jm);
        int k;
        /*for(k=0;k<jmb;k++)
        {
            printf("%c",jm[k]);
        }/**/
        //printf("%s",jm);
    } 
    
    int main()
    {
        int choice;
        int n=250;
        while(n--)
        {
            //system("cls");
            printf("欢迎使用文件加密系统!\n");
            printf("请输入您的选择\n");
            printf("1.加密文件 2.解密文件 3.退出系统\n");
            scanf("%d",&choice);
    
            switch (choice)
            {
                case 1:
                    en();
                    break;
                case 2:
                    de();
                    break;
                case 3:
                    printf("非常感谢您的使用!期待与您下次相见\n");
                default:
                    printf("输入选择有误!请重新输入:");
                    scanf("%d",&choice);
                    break;
            }
        }
        system("pause");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月4日
  • 创建了问题 1月2日

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error