C语言字符串加密

发布于 2019-07-29  12 次阅读


自己无聊写出来的小玩意。。加密方式选的正负数变换,很鸡肋的方式但对中文比较友好。。如果要用的话请换掉这个方式
我也不知道还要说什么,还是直接上代码吧

加密部分

void encryption()//对文件的内容进行加密
{
printf("请输入要加密的文件名(绝对路径,直接拖进来也可以)\n");
char *filename;
filename=(char*)malloc(sizeof(char) * 100);//给filename分配一个 100大小的动态空间 
RESCANF1:
scanf("%s",filename);
FILE *fp;
fp=fopen(filename,"r+b");
    while (fp==NULL){
        printf("该文件不存在!\n"); 
        goto RESCANF1;
        }
char read[10000];
fgets(read,10000,fp);        //得到了文件中的字符串并存于read数组中
//以下是加密算法 
int f=1;
for (int i=0;i<strlen(read);i++)
    {
    read[i]+=f;
    f=-f;
    }
fclose(fp);
printf("加密完成的文件将存于D盘的根目录下,名称为  已加密.txt\n");
Sleep(1000);
//以下将加密完成的数组重新写入文件保存
FILE *fp1;
fp1= fopen("D:/已加密.txt","w+b");
fputs(read,fp1);
fclose(fp1);
free(filename);//释放掉堆内存
return;
}

解密部分

void decrypt()//对文件的内容进行解密
{
    printf("请输入要解密的文件名(绝对路径,直接拖进来也可以)\n");
    char *filename;
    filename=(char*)malloc(sizeof(char) * 100);//给filename分配一个 100大小的动态空间 
RESCANF2:
    scanf("%s",filename);
    FILE *fp;
    fp=fopen(filename,"r+b");
        while (fp==NULL){
            printf("该文件不存在!请重新输入\n");
            goto RESCANF2;
            }
    char read[10000];
    fgets(read,10001,fp);//得到了文件中的字符串并存于read数组中
    //以下是解密算法
    int f=-1;
    for(int i=0;i<strlen(read);i++)
    {
        read[i]+=f;
        f=-f;
    }
    fclose(fp);
    printf("解密完成的文件将存于D盘的根目录下,名称为  已解密.txt\n");
    //以下将解密完成的数组重新写入文件保存
    FILE *fp1;
    fp1= fopen("D:/已解密.txt","a+b");
    fputs(read,fp1);
    fclose(fp1);
    free(filename);//释放掉堆内存
    return;
}