课程设计,文件加密

小提示,密码文件需要自己先创建一个txt文件自己输入6个字符密码,路径与代码的运行路径在一起。。。

/*题目:文件加密
  文件的传输会有明文和密文的区别,明文发送时不安全的,用一个程序实现发送文件的加密和解密操作。
  加密算法,密钥设计由同学自己选择现有的加密解密算法或是自己设计的。
  要求:
    (1)对文件的字符根据加密算法,实现文件加密。
    (2)对操作给出必要的提示。
    (3)对存在的file1.txt文件,必须先打开,后读写,最后关闭。加密后的文件放在file2.txt。
    (4)解密文件保存在file3.txt中。
*/

#include <stdio.h>  // 标准输入输出函数
#include <stdlib.h>  // 标准库函数
#include <string.h>  // 字符串处理函数
#include  <conio.h>   //控制台输入输出函数
char password[6];//软件初始密码
int jiami();
int check(int type);
int jiemi();
int xianshi();
int zhucaidan();
int fuzhi();
int fanhui();
int gaimima();
int jieshu();
char infile[20];
char outfile[21];

int main()
{
    system("cls");
    // 操作前先校验密码
    if(!check(1))
    {
        printf("抱歉,3次输入密码错误。按任意键退出程序...");
        getchar();
        exit(0);
    }
    // 密码校验成功,显示程序菜单,执行各种操作
     zhucaidan();
     return 0;
}

int jiami()
{
    FILE *in;
    FILE *out;
    int i=0;
    char ch;
    char yuanzifu[100000];
    char gaiguodezifu[100000];
    system("cls"); // 清屏
    printf("╔════════════════════════════════════╗\n");
    printf("║                                    ║\n");
    printf("║    欢迎使用本软件进行文件加密      ║\n");
    printf("║                                    ║\n");
    printf("║          祝您体验愉快              ║\n");
    printf("║                                    ║\n");
    printf("╚════════════════════════════════════╝\n");
    printf("请输入需要加密的文件名(含路径):");
    scanf("%s",infile);
    in=fopen(infile,"rb");//只读文件
    if(in==NULL)
    {
        printf("\n文件[%s]打开失败,请检查文件路径和名称是否输入正确!\n",infile);
        printf("\n按下任意键返回重新输入加密文件....");
        system("pause");//输入任意字符后进行下一步,也就是让输出停留
        return jiami();
    }
    printf("\n请输入加密后的文件名(含路径):");
    scanf("%s",outfile);
    out=fopen(outfile,"wb");//只写文件
    if(out==NULL)
    {
        printf("文件[%s]创建/写入失败,请检查文件路径和名称是否输入正确!\n",outfile);
        printf("\n按下任意键返回重新输入加密文件....");
        system("pause");//输入任意字符后进行下一步,也就是让输出停留
        return jiami();
    }
     ch=fgetc(in);//读入一个字符
     while(ch!=EOF)//读入字符直到字符结束
    {
      yuanzifu[i]=ch;//将ch赋给字符串数组
      i++;
      ch=fgetc(in);//读入一个字符
    }
    int n;
    n=i;
    putchar(10);//空行
    printf("原文件内容如下:\n");
    printf("%s\n",yuanzifu);
    //printf("n=%d",n);
    for(i=0;i<n;i++)
    {
        int s=1;
        int m=3000;
        gaiguodezifu[i]=yuanzifu[i]+s*s-m;//进行字符加密处理
        s++;
        m--;
        if(s>5000)
        {
            s=1;
        }
    }
    //printf("%s",gaiguodezifu);
    for(i=0;i<n;i++)
    {
        ch=gaiguodezifu[i];
        fputc(ch,out);
       // putchar(ch);
    }
    putchar(10);
    printf("加密后的文件内容如下:\n");
    printf("%s",gaiguodezifu);
    putchar(10);
    printf("\n按下任意字符后继续:");
    system("pause");//输入任意字符后进行下一步,也就是让输出停留
    fclose(in);
    fclose(out);
    system("cls"); // 清屏
    printf("\n\n恭喜你,文件[%s]加密成功,保存在[%s]。\n", infile, outfile);
    printf("\n\n输入任意字符进行选择下一操作");
    system("pause");
    return fanhui();
}

int jiemi()
{
    system("cls");// 清屏
    FILE *in;
    FILE *out;
    int i=0;
    char ch;
    char yuanzifu[100000];
    char gaiguodezifu[100000];
    printf("╔════════════════════════════════════╗\n");
    printf("║                                    ║\n");
    printf("║    欢迎使用本软件进行文件解密      ║\n");
    printf("║                                    ║\n");
    printf("║          祝您体验愉快              ║\n");
    printf("║                                    ║\n");
    printf("╚════════════════════════════════════╝\n");
    printf("请输入需要解密的文件名(含路径):");
    scanf("%s",infile);
    in=fopen(infile,"rb");//只读文件
    if(in==NULL)
    {
        printf("\n文件[%s]打开失败,请检查文件路径和名称是否输入正确!\n",infile);
        printf("\n按下任意键返回重新输入解密文件....");
        system("pause");//输入任意字符后进行下一步,也就是让输出停留
        return jiemi();
    }
    printf("\n请输入解密后的文件名(含路径):");
    scanf("%s",outfile);
    out=fopen(outfile,"wb");//只写文件
    if(out==NULL)
    {
        printf("文件[%s]创建/写入失败,请检查文件路径和名称是否输入正确!\n",outfile);
        printf("\n按下任意键返回重新输入解密文件....");
        system("pause");//输入任意字符后进行下一步,也就是让输出停留
        return jiemi();
    }
     ch=fgetc(in);//读入一个字符
     while(ch!=EOF)//读入字符直到字符结束
    {
      yuanzifu[i]=ch;//将ch赋给字符串数组
      i++;
      ch=fgetc(in);//读入一个字符
    }
    int n;
    n=i;
    putchar(10);//空行
    printf("加密文件内容如下:\n");
    printf("%s\n",yuanzifu);
    //printf("n=%d",n);
    for(i=0;i<n;i++)
    {
        int s=1;
        int m=3000;
        gaiguodezifu[i]=yuanzifu[i]-s*s+m;//进行字符解密处理
        s++;
        m--;
        if(s>5000)
        {
            s=1;
        }
    }
    //printf("%s",gaiguodezifu);
    for(i=0;i<n;i++)
    {
        ch=gaiguodezifu[i];
        fputc(ch,out);
       // putchar(ch);
    }
    putchar(10);
    printf("解密后的文件内容如下:\n");
    printf("%s",gaiguodezifu);
    putchar(10);
    printf("\n按下任意字符后继续...");
    system("pause");//输入任意字符后进行下一步,也就是让输出停留
    fclose(in);
    fclose(out);
    system("cls"); // 清屏
    printf("\n\n恭喜你,文件[%s]解密成功,保存在[%s]。\n", infile, outfile);
    printf("\n\n输入任意字符进行选择下一操作...");
    system("pause");
    return fanhui();
}

int xianshi()
{
    FILE *in;
    char ch2;
    system("cls");
    printf("************************************\n");
    printf("**   欢迎使用本软件进行文件显示   **\n");
    printf("**         祝您体验愉快           **\n");
    printf("************************************\n");
    printf("\n\n请输入需要显示的文件(包含路径):");
    scanf("%s",infile);
    in=fopen(infile,"rb");
    if(in==NULL)
    {
        printf("\n打开文件错误,请检查文件名(路径),按任意键重新输入...");
        system("pause");
        return xianshi();
    }
    while(ch2!=EOF)
    {
        ch2=fgetc(in);
        putchar(ch2);
    }
    printf("\n\n按下任意键进入下一选项...");
    system("pause");
    return fanhui();
}

int check(int a)
{
    int i;
    char ch3[6];
    FILE *in;
    in=fopen("mima.txt","r+");
    if(in==NULL)
    {
        printf("\n\n密码文件错误,请检查...\n");
        exit(0);
    }
    for(i=0;i<6;i++)
    {
        ch3[i]=fgetc(in);
    }
    for(i=0;i<6;i++)
    password[i]=ch3[i];
   // printf("%s",password);
    char pwd[6];  //用户输入的密码
    int trytimes;  // 用户尝试输入密码的次数
    printf("作者:陈浩翔 \n");
    printf("\n程序设置了密码,验证通过后才能使用。请输入6位数字密码:");
    for(trytimes=1; trytimes<=3; trytimes++)
    {
        scanf("%s",pwd);
        fflush(stdin);/*清空输入缓冲区。
                        比如scanf("%d",&a);
                            scanf("%c",&c);
                   经常如果这种情况的话,
                   第一次输入的回车可能会被第二次输入操作所捕捉,
                   这个的作用就是清空缓冲,这样就不会出现这种情况了。*/
        if(pwd[0]==password[0]&&pwd[1]==password[1]&&pwd[2]==password[2]&&pwd[3]==password[3]&&pwd[4]==password[4]&&pwd[5]==password[5])
        {
            return 1;
            break;
        }
        else
        if(trytimes==3)
        {
            return 0;
        }
        else
        {
            printf("抱歉,密码错误,您还有%d次机会:", 3-trytimes);
        }
    }
    return 0;
}
int zhucaidan()
{
    system("cls");//清屏
    printf("****************************************************\n");
    printf("**             欢迎来到文件加密解密界面           **\n");
    printf("**                信息科学与工程学院              **\n");
    printf("**                     软件作者:                 **\n");
    printf("**                1406102-15  陈浩翔              **\n");
    printf("**                                                **\n");
    printf("**               请选择即将进行的操作             **\n");
    printf("**               输入1:加密文件                  **\n");
    printf("**               输入2:解密文件                  **\n");
    printf("**               输入3:显示文件内容              **\n");
    printf("**               输入4:将原文件内容复制到另一文件**\n");
    printf("**               输入5:修改程序密码              **\n");
    printf("**               输入6:退出软件                  **\n");
    printf("****************************************************\n");
    int b;
    scanf("%d",&b);
    switch(b)
    {
        case 1:jiami();break;
        case 2:jiemi();break;
        case 3:xianshi();break;
        case 4:fuzhi();break;
        case 5:gaimima();break;
        case 6:jieshu();break;
        default:
                {
                    printf("没有相应的菜单!按任意键返回...");
                    system("pause");
                    return zhucaidan();
                }
        return 0;
    }
}//bug1:在主菜单输入多个字母会自动跳到加密文件菜单;

int fuzhi()
{
    system("cls");//清屏
    printf("╔════════════════════════════════════╗\n");
    printf("║                                    ║\n");
    printf("║    欢迎使用本软件进行文件复制      ║\n");
    printf("║                                    ║\n");
    printf("║          祝您体验愉快              ║\n");
    printf("║                                    ║\n");
    printf("╚════════════════════════════════════╝\n");
    FILE *in1,*out1;
    char ch1;
    printf("请输入需要加密的文件名(含路径):");
    scanf("%s",infile);
    in1=fopen(infile,"rb");//只读文件
    if(in1==NULL)
    {
        printf("\n文件[%s]打开失败,请检查文件路径和名称是否输入正确!\n",infile);
        printf("\n按下任意键返回重新输入加密文件....");
        system("pause");//输入任意字符后进行下一步,也就是让输出停留
        return fuzhi();
    }
    printf("\n请输入加密后的文件名(含路径):");
    scanf("%s",outfile);
    out1=fopen(outfile,"wb");//只写文件
    if(out1==NULL)
    {
        printf("文件[%s]创建/写入失败,请检查文件路径和名称是否输入正确!\n",outfile);
        printf("\n按下任意键返回重新输入加密文件....");
        system("pause");//输入任意字符后进行下一步,也就是让输出停留
        return fuzhi();
    }
    while(!feof(in1))//如果没有遇到输入文件的结束标志
        //feof(in)是检查in指向的文件是否结束
    {
        ch1=fgetc(in1);//从输入文件读入一个字符,暂时放在变量ch中
        fputc(ch1,out1);//将ch写到out指向的文件中
        putchar(ch1);
    }
    putchar(10);
    fclose(in1);
    fclose(out1);
    return fanhui();
}

int fanhui()
{
      system("cls");//清屏
      int m;
      system("cls");
      printf("############################################\n");
      printf("##           操作成功,请进行选择         ##\n");
      printf("##           1:进入加密菜单              ##\n");
      printf("##           2:进入解密菜单              ##\n");
      printf("##           3:进入显示文件内容菜单      ##\n");
      printf("##           4:进入文件复制菜单          ##\n");
      printf("##           5:返回主菜单                ##\n");
      printf("##           6:退出程序                  ##\n");
      printf("############################################\n");
      scanf("%d",&m);
      switch(m)
      {
          case 1:jiami();break;
          case 2:jiemi();break;
          case 3:xianshi();break;
          case 4:fuzhi();break;
          case 5:main();break;
          case 6:jieshu();break;
          default:
         {
          printf("没有对应选项,按任意键返回");
          system("pause");//输入任意字符后进行下一步,也就是让输出停留
          return fanhui();
         }
      }
}

int gaimima()
{
    system("cls");
    int i;
    char ch[6];
    char cha[6];
    FILE *in;
    in=fopen("mima.txt","w+");
    if(in==NULL)
    {
        printf("\n\n打开(建立)文件出错...\n");
        exit(0);
    }
    getchar();
    printf("\n请输入6个新密码字符或数字:");
    for(i=0;i<6;i++)
    {
        scanf("%c",&ch[i]);
    }
    getchar();
    printf("\n\n请再输入一次6个新密码字符或数字:");
    for(i=0;i<6;i++)
    {
        scanf("%c",&cha[i]);
    }

    for(i=0;i<6;i++)
    {
        if(ch[i]!=cha[i])
        {
            printf("2次输入的密码不同,请重新输入:");
            system("pause");
            return gaimima();
        }
        continue;
    }
    for(i=0;i<6;i++)
    {
        password[i]=ch[i];
    }
    for(i=0;i<6;i++)
    {
        fputc(password[i],in);
    }
    fclose(in);
    printf("按下任意键返回主菜单...");
    system("pause");
    return main();
}

int jieshu()
{
    system("cls");
    printf("***************************\n");
    printf("** 欢迎下次再使用本软件  **\n");
    printf("**    ( ^_^ )/~~拜拜     **\n");
    printf("***************************\n");
    return ;
}

我上传部分运行图片:

大一下期课程设计。

时间: 2024-08-01 15:52:52

课程设计,文件加密的相关文章

设计-各位大神,文件加密系统怎么做???

问题描述 各位大神,文件加密系统怎么做??? 本人战五渣,毕业设计为文件加密系统,可是完全不知该如何下手. 不知道需要涉及哪些编程知识?我在网上找了许多,在本站也下了不少东西,别人现成的设计看了也看不懂T^T 请各位好心的大大帮助一下,给我一点建议!感激不尽! 解决方案 主要是文件操作,打开文件,一个字节一个字节读出来,用你的加密算法对每个字节进行处理(例如每个字节加1),写到一个新的文件中,这就加密成功了,解密就是倒过来(每个字节减1). 涉及到的知识主要有文件操作和指针的操作. 解决方案二:

本地加密-android本地文件加密该如何设计

问题描述 android本地文件加密该如何设计 最近遇到一个把本地文件加密的问题,不知道该如何解决.求各位大神给思路... 用对称加密,首先可破解不说,他解密后生成的临时文件也会被人看到,不安全. 也想过在文件头写点自己知道的东西,最后自己读的时候去掉,或者非对称加密,但是都要生成解密后真正可读的临时文件,临时文件就是个不安全的隐患,想过直接去读解密后放在内存里的字节数组,但是因为加密文件可能要给第三方应用读取,所以还是得生成个解密后真正可读的临时文件,这个临时文件该怎么放才会更安全?求大神们给

sql 业务流程图-SQL课程设计中业务流程图的.bpb.bpm文件是什么,怎么开

问题描述 SQL课程设计中业务流程图的.bpb.bpm文件是什么,怎么开 SQL课程设计中业务流程图的.bpb.bpm文件是什么,怎么开 解决方案 物理模型图 建模用的.PowerDesigner 打开. 解决方案二: 查 百 度

求帮助啊 急用啊-利用C语言设计简单的文件加密解密程序

问题描述 利用C语言设计简单的文件加密解密程序 利用C语言设计简单的文件加密解密程序,并通过代码实现,希望得到源代码. 解决方案 最简单的用xor实现加密.http://blog.csdn.net/fdipzone/article/details/20413631 解决方案二: http://blog.163.com/chatter@126/blog/static/12766566120101020102247603/http://blog.csdn.net/szhhck/article/det

《计算机网络课程设计(第2版)》——1.3节计算机网络课程的知识点

1.3 计算机网络课程的知识点 1. 组织计算机网络课程的知识点 在组织计算机网络课程的知识点时,一般都是以Internet技术与高速网络技术为主线,加入网络发展的最新成果. 网络最重要的应用是Internet.Internet对科技进步和社会发展的影响是非常显著的,并且这种影响还在继续扩大,这也正体现出网络技术发展的生命力.因此,学习网络知识重要的是通过学习网络的基本知识,认识Internet的核心技术,理解Internet的实现方法.通过本课程的学习,学生能够初步掌握网络和Internet技

c语言-C语言课程设计字符串题目匹配单词,求大神~~~~~~~~~~~~~~~~~

问题描述 C语言课程设计字符串题目匹配单词,求大神~~~~~~~~~~~~~~~~~ 详细题目如下:设有n个单词的字典表(1<=n<=100),计算某单词在字典表中的4种匹配情况(字典中的单词和待匹配的单词长度上限为255):1)i :该单词在字典表中的序号:2)Ei:在字典表中仅有一个字符不匹配的单词不匹配的单词序号:3)Fi:在字典表中多(或少)一个字符(其余字符匹配)的单词序号:4)N:其他情况.当查找时有多个单词符合条件,仅要求第1个单词的序号即可.1)输入文件,文件格式为:n(字典表

代码-急求,一个课程设计作业,最近要去考G,实在没空做

问题描述 急求,一个课程设计作业,最近要去考G,实在没空做 1000C 简单SQL数据定义语言DDL的解释器实现 1.问题理解和分析(简单分析)针对一个需求比较明确的问题,进行问题定义.明确"做什么(What to do?)".2.确定解决问题的方法(技术方案.简单设计)主要是构思解决问题的主要思路,明确"怎么做(How to do?)".采用自顶向下方法,确定各个功能,用模块图描述系统的功能.确定各个功能对应的函数,以及函数之间的关系并能用流程图描述函数的算法.3

急 c++课程设计排序问题。要求如下:

问题描述 急 c++课程设计排序问题.要求如下: 二. 课程设计的主要内容 功能描述:某实验室对研究生每天的科研时间进行管理,研究生每天进入实验室时记录其到达时间,离开实验室时记录其离开时间.两个时间之间的时间段作为其当天的科研工作时间.请你为其设计一个考勤管理系统,该系统需要提供下列功能: (1) 研究生信息录入功能,提示用户逐项输入研究生信息(时.分.秒分三次逐项输入),并检查输入信息的合法性(如时.分.秒的取值范围),同时以分为单位计算每位同学的科研时间: (2) 考勤信息浏览功能,显示所

c++-课程设计急急急急!!!!!!!!!!

问题描述 课程设计急急急急!!!!!!!!!! 设计一个类,实现中药方剂中中药名称的标准化处理 要求: 1 自己设计构造函数 和 析构函数 2 每一个方剂的格式为, 药物名称 剂量,每个方剂不超过1000个字符, 要求使用动态分配存放每个方剂. 中药经常有别名,我们事先提供所有中药的别名,格式为标准名:别名之间以逗号隔开 如 黄连:味连,雅连,云连,川连 把所有的别名规范为统一的标准名称,如上例中的 川连3g 规范为 黄连3g, 规范后的结果为:太子参10g,炒白术10g,淮山药15g,陈皮5g