C语言文件加密与解密

加密一篇英语文章,将每一个单词的列数与行数作为密码,如第一行第一列的单词,密文是(1,1)

首先读出一行然后分析单词,以空格作为分隔符。读到第一个词记录为(1,1),然后从空格向后截取字符。接着用找到下个空格的位置。截取到空格位置为第二个单词。记录为(1,2)。然后截取到下个空格位置,再截取一个单词继续记录。然后读取下行。直到分析完。

看看这样行不行

img

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
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=-5;
    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;    
        if(c>='A'&&c<='Z')
        {
            c=c+57-(c-'A')*2;
        }
        else if(c>='a'&&c<='z')
        {
            c=c-7-(c-'a')*2;
        }
            yb++;
            fputc(c, fp2);
            m[mb] =c;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++;
        if(c>='A'&&c<='Z')
        {
            c=c+57-(c-'A')*2;
        }
        else if(c>='a'&&c<='z')
        {
            c=c-7-(c-'a')*2;
        }
            fputc(c, fp2);
            jm[jmb] =c;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;
}