c语言课程设计之文本文件加密技术

admin 2025年1月17日14:11:02评论2 views字数 2738阅读9分7秒阅读模式
#include#include//使用了exit函数#include#define M 30void menu(void);//菜单函数void create(void);//新建文件及输入文本函数void encrypt(void);//加密函数void decrypt(void);//解密函数int judge(void);//判断函数int proceed(code);//判断密码是否合理char code[M];main(){    int num;//定义菜单指令的变量    while(1)    {        menu();        scanf("%d",&num);        switch(num)        {            case 0:printf("n");                   exit(0);            case 1:system("cls");//清屏处理                   create();                   break;            case 2:system("cls");                   encrypt();                   break;            case 3:system("cls");                   decrypt();                   break;            default:printf("input error, enter again!n");                   break;        }    }}void menu(void){    printf("***********n");    printf("****n");    printf("* 文本文件加密技术 *n");    printf("******************************************************n");    printf("n0.exitn");    printf("1.create and inputn");    printf("2.encryptn");    printf("3.decryptn");    printf("nchoose(0--3):");}void create(void){    FILE *fp;//定义文件指针fp用以指向某个文件    char ch[100];//定义输入字符    char fname[40];//文件名字    int i;//判断次数    printf("input file name:");    scanf("%s",&fname);    if((fp = fopen(fname,"w"))==NULL)    {        printf("failure to open %s.n",fname);        exit(0);    }    //判断文件能否正常打开或建立    printf("input the content:n");    for(i = 0;;i++)    {        scanf("%c",&ch[i]);        if(ch[i] == '#'&&ch[i-1] == '#')            break;        fputc(ch[i],fp);//将字符的ASCII码写入文件    }    //while((ch = getchar()) != '#')    //fputc(ch,fp);    fclose(fp);}void encrypt(void){    int n = 1,x;    FILE *fp, *fp1;    char c, fname[M];    while(n)   {     printf("n输入加密密码(至少两个字母和四个数字):n");     scanf("%s",code);     x = proceed(code);     if(x == 1)     {        while(n)        {           printf("n输入加密的文件名n");           scanf("%s",fname);           if((fp = fopen(fname,"r")) == NULL)//以读的方式打开源文件           {               printf("n无法打开,继续按 Y or yn");               getchar();               n = judge();           }           if((fp1 = fopen("encrypt.txt","w")) == NULL)//以写的方式打开目标文件           {               printf("无法打开n");               exit(0);           }           while((c = fgetc(fp)) != EOF)           {               fputc(c+1,fp1);           }//将fp所指向文件中的内容进行加一的加密方法            fclose(fp1);            fclose(fp);            remove(fname);//remove函数删除指定文件            rename("encrypt.txt",fname);//给文件重命名,实现文件移动功能(若归属文件夹不同,可以实现该文件移动)            printf("n文档加密并保存成功!n");            printf("n是否继续加密,继续请按y:n");            n = judge();       }    }     else     printf("n密码不合格!n");     getchar();//停顿一下,等待判断是否继续加密   }}void decrypt(void){    int n = 1;    FILE *fp,*fp1;    char c,fname[M];    char code1[M];//用户输入的密码    int i;    while(n)    {        printf("n输入解密密码n");        scanf("%s",code1);        if(strcmp(code1,code) == 0)        {            while(n)            {                printf("n解密的文件名:n");                scanf("%s",fname);                if((fp = fopen(fname,"r")) == NULL)                {                    printf("n 文件打不开n");                    exit(0);                }                if((fp1 = fopen("decrypt.txt","w")) == NULL)                {                    printf("无法打开文件!n");                    exit(0);                }                while((c = fgetc(fp)) != EOF)//文件末尾标志                {                    fputc(c-1,fp1);                    if(c-1 != '#')                        putchar(c-1);                }                fclose(fp1);                fclose(fp);                remove(fname);                rename("decrypt.txt",fname);//将decrypt.txt重命名为fname,归属文件夹不同,可以做到移动的效果                printf("nn是否继续解密,继续请按y:n");                n = judge();            }        }        else printf("n输入有误,重新输入:n");        getchar();    }}int judge(void){    char x;//要判断的数    scanf("%c",&x);    if(x == 'Y' || x == 'y')        return 1;    else        return 0;}int proceed(char code[]){    int i, flag1 = 0,flag2 = 0,len;    len = strlen(code);    for(i = 0; i< len; i++)    {        if(code[i] >= 'a' && code[i] <= 'z')            flag1 += 1;        else if(code[i] >= 'A' && code[i] <= 'Z')            flag1 += 1;        else if(code[i] >= '0' && code[i] <= '9')            flag2 += 1;    }    if(flag1 >= 2 && flag2 >= 4)        return 1;    else        return 0;}

原文始发于微信公众号(汇编语言):c语言课程设计之文本文件加密技术

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月17日14:11:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   c语言课程设计之文本文件加密技术http://cn-sec.com/archives/1079216.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息