文件加解密,文件操作

简介:  1、fseek,ftell,fread,fwrite(简单文件加密) #define _CRT_SECURE_NO_WARNINGS  //去掉安全检查 #include <stdio.h> #include <stdlib.h>   /*读取文件大小*/ int getfilesize(char *pa


1fseek,ftell,fread,fwrite(简单文件加密)

#define _CRT_SECURE_NO_WARNINGS  //去掉安全检查

#include <stdio.h>

#include <stdlib.h>

 

/*读取文件大小*/

int getfilesize(char *path)

{

    FILE *pf = fopen(path, "r");

    if (pf == NULL)

    {

        fclose(pf);

        return -1;

    }

    else

    {

        fseek(pf,0,SEEK_END);

        int length = ftell(pf);

        //获取文件大小

        return length;

    }

    fclose(pf);

}

 

/*实现文件复制*/

void copy(char *oldpath,char *newpath)

{

    FILE *pfr, *pfw;

    //以打开二进制文件的方式打开

    pfr = fopen(oldpath, "rb");

    //写入二进制模式

    pfw = fopen(newpath, "wb");

    if (pfr == NULL || pfw == NULL)

    {

        fclose(pfr);   //关闭文件

        fclose(pfw);

        return;

    }

    else

    {

        int length = getfilesize(oldpath);

        //分配内存,读取文件

        char *p = (char *)malloc(length * sizeof(char));

        //读取二进制到内存

        fread(p,sizeof(char),length,pfr);

        //写入二进制到文件

        fwrite(p,sizeof(char),length,pfw);

       

        //关闭文件

        fclose(pfr);

        fclose(pfw);

    }

}

 

void encryptyfile(char *oldpath,char *newpath)

{

    FILE *pfr, *pfw;

    pfr = fopen(oldpath, "rb");

    //写入二进制模式

    pfw = fopen(newpath, "wb");

    if (pfr == NULL || pfw == NULL)

    {

        //关闭文件

        fclose(pfr);

        fclose(pfw);

        return;

    }

    else

    {

        int length = getfilesize(oldpath);

        //分配内存,读取文件

        char *p = (char *)malloc(length*sizeof(char));

        //读取二进制到内存

        fread(p,sizeof(char),length,pfr);

        for (int i = 0; i < length;i++)

        {

            //加密方法是,与制定字符进行异或操作

            p[i] ^= 'A';

        }

        //写入二进制到文件

        fwrite(p, sizeof(char), length, pfw);

 

        //关闭文件

        fclose(pfr);

        fclose(pfw);

    }

}

 

/*解密文件*/

void decodefile(char *oldpath,char *newpath)

{

    FILE *pfr, *pfw;

    pfr = fopen(oldpath, "rb");

    //写入二进制模式

    pfw = fopen(newpath,"wb");

    if (pfr == NULL || pfw == NULL)

    {

        fclose(pfr);

        fclose(pfw);

        return;

    }

    else

    {

        int length = getfilesize(oldpath);

        //分配内存,读取文件

        char *p = (char *)malloc(length*sizeof(char));

        //读取二进制到内存

        fread(p,sizeof(char),length,pfr);

        int i;

        for (i = 0; i < length;i++)

        {

            p[i] ^= 'A';

        }

        //写入二进制到文件

        fwrite(p, sizeof(char), length, pfw);

    }

    //关闭文件

    fclose(pfr);

    fclose(pfw);

}

int main(int argc,char *argv[])

{

    char *path1 = "G:\\1.txt";

    char *path2 = "G:\\2.txt";

    char *path3 = "G:\\3.txt";

 

    encryptyfile(path1, path2);

    decodefile(path2, path3);

    //printf("%d\n",getfilesize(path1));

 

    system("pause");

    return 0;

}

上面的过程将会把加解密的文件输出到文件中。

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

 

char jiami(char ch)

{

    return ch ^ 123;

}

 

char jiemi(char ch)

{

    return ch ^ 123;

}

 

void jia(char *path, char *pathjia)

{

    FILE *pfr, *pfw;

    pfr = fopen(path, "r");//读取

    pfw = fopen(pathjia, "w");//写入

    if (pfr == NULL || pfw == NULL)

    {

        fclose(pfw);

        fclose(pfr);

        return;

    }

    else

    {

        //feof(FILE *pf) 到了文件末尾1,没有到就是0

        //下面的过程将把文件内容输出到屏幕上。

        while (!feof(pfr))

        {

            //读取字符

            char ch = fgetc(pfr);

            putchar(ch);

            //输出字符的时候将字符加密

            fputc(jiami(ch), pfw);

        }

    }

    fclose(pfr);

    fclose(pfw);//关闭文件

}

 

/*解密*/

void jie(char *path,char *pathjie)

{

    FILE *pfr, *pfw;

    //读取

    pfr = fopen(path, "r");

    //写入

    pfw = fopen(pathjie,"w");

    if (pfr == NULL || pfw == NULL)

    {

        fclose(pfr);

        fclose(pfw);

        return;

    }

    else

    {

        //到了文件末尾1,没有到就是0

        while (!feof(pfr))

        {

            char  ch = fgetc(pfr);//读取字符

            putchar(ch);

            fputc(jiemi(ch), pfw);//写入一个加密的字符

        }

    }

    fclose(pfr);

    //关闭文件

    fclose(pfw);

}

 

int main(int argc,char *argv[])

{

    char *path1 = "G:\\1.txt";

    char *path2 = "G:\\2.txt";

    char *path3 = "G:\\3.txt";

 

    //jia(path1, path2);

    jie(path2, path3);

 

    system("pause");

    return 0;

}

 

 

 

密码加密

头文件:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include<stdlib.h>

#include<string.h>

 

//字符串加密

char * stringjiami(char *password, char *string);

//字符串解密

char * stringjiemi(char *password, char *jiastring);

void filejiami(char *path, char *pathjia, char *password);

void filejiemi(char *pathjia, char *pathjie, char *password);

 

 

 

 

 

#include "encrytiondecrytion.h"

 

int getfilesize(char *path)

{

    FILE *pf = fopen(path,"r");

    if (pf == NULL)

    {

        return -1;

    }

    else

    {

        fseek(pf, 0, SEEK_END);//文件末尾

        int length = ftell(pf);

        return length;//返回长度

    }

}

 

char * stringjiami(char *password, char *string)

{

    //获取加密长度

    int passlength = strlen(password);

    //获取字符串长度

    int stringlength = strlen(string);

    if (stringlength % passlength == 0)

    {

        //循环次数

        int ci = stringlength / passlength;

        int i,j;

        for (i = 0; i < ci;i++)   //循环次数

        {

            //循环密码

            for (j = 0; j < passlength;j++)

            {

                string[passlength*i + j] ^= password[j];

            }

        }

    }

    else

    {

        int ci = stringlength / passlength; //循环次数

        int i, j;

        for (int i = 0; i < ci;i++)

        {

            //循环密码

            for (j = 0; j < passlength;j++)

            {

                string[passlength * i + j] ^= password[j];

            }

        }

        int lastlength = stringlength % passlength;//剩下的长度

        for (int i = 0; i < lastlength;i++)

        {

            string[passlength*(stringlength / passlength) + i] ^= password[i];

        }

    }

    return string;

}

 

//字符串解密

char * stringjiemi(char *password, char *jiastring)

{

    //获取加密长度

    int passlength = strlen(password);

    //获取字符串长度

    int stringlength = strlen(jiastring);

    if (stringlength %passlength == 0)

    {

        int ci = stringlength / passlength;//循环次数

        int i, j;

        for (i = 0; i < ci; i++)

        {

            for (j = 0; j < passlength;j++)

            {

                //异或加密

                jiastring[passlength * i + j] ^= password[j];

            }

        }

    }

    else

    {

        //循环次数

        int ci = stringlength / passlength;

        int i, j;

        for (i = 0; i < ci;i++)

        {

            //循环密码

            for (j = 0; j < passlength;j++)

            {

                //异或加密

                jiastring[passlength*i + j] ^= password[j];

            }

        }

        //剩下的长度

        int lastlength = stringlength % passlength;

        for (int i = 0; j < lastlength;i++)

        {

            jiastring[passlength*(stringlength / passlength) + i] ^= password[i];

        }

    }

    return jiastring;

}

 

void filejiami(char *path, char *pathjia, char *password)

{

    FILE *pfr, *pfw;

    pfr = fopen(path, "r");

    pfw = fopen(pathjia,"w");

    if (pfr == NULL || pfw == NULL)

    {

        fclose(pfr);

        fclose(pfw);

        return;

    }

    else

    {

        int length = getfilesize(path);

        char *newstr = (char*)malloc(sizeof(char)*(length + 1));

        for (int i = 0; i < length;i++)

        {

            char ch = fgetc(pfr);  //获取一个字符

            newstr[i] = ch;//不断存入字符

        }

        //字符串处理为'\0'

        newstr[length] = '\0';

        //加密字符串

        stringjiami(password, newstr);

 

        int i;

        for (i = 0; i < length;i++)

        {

            //挨个写入字符

            fputc(newstr[i], pfw);

        }

    }

    fclose(pfr);

    //关闭文件

    fclose(pfw);

}

 

main.c

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include<stdlib.h>

#include "encrytiondecrytion.h"

 

int main(int argc,char *argv[])

{

    char string[50] = "锄禾日当午";

    char *password = "123";

    printf("%s\n",stringjiami(password,string));

    printf("%s\n", stringjiami(password, string));

 

    char *path1 = "G:\\1.txt";

    char *path2 = "G:\\2.txt";

    char *path3 = "G:\\3.txt";

 

    filejiami(path1, path2, "ABCDE");

    filejiami(path2, path3, "ABCDE");

 

    system("pause");

}

 

fscanf

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

 

int main(int argc, char *argv[])

{

    char str[100] = { 0 };

    fscanf(stdin, "%s", str);

    fprintf(stdout, "str=%s\n", str);

 

    system(str);

    return 0;

}

 

 

 

 

 

 

 

 

 

 

目录
相关文章
|
机器学习/深度学习 算法 决策智能
选址问题-精确重心法和遗传算法
选址问题-精确重心法和遗传算法
1974 0
|
XML 前端开发 Java
深入了解Spring MVC工作流程
深入了解Spring MVC工作流程
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
10月前
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
|
机器学习/深度学习 人工智能 监控
探索人工智能在图像识别领域的创新应用
【5月更文挑战第25天】随着深度学习技术的飞速发展,人工智能(AI)在图像识别领域取得了重大进展。本文将深入探讨人工智能如何通过先进的算法和模型改进图像识别能力,并分析其在不同行业中的应用前景。我们将重点讨论卷积神经网络(CNN)与循环神经网络(RNN)的结合使用,以及生成对抗网络(GAN)在提高图像质量方面的作用。此外,文中还将提及数据增强、迁移学习等策略对提升模型泛化性能的重要性。
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
人工智能 安全 搜索推荐
未来智能家居技术的发展趋势与挑战
随着人工智能和物联网技术的不断进步,智能家居领域正迎来前所未有的发展机遇与挑战。本文将探讨未来智能家居技术的发展趋势,分析智能家居面临的挑战,并展望智能家居领域的发展前景。
ClassCastException(类转换异常)可能原因和解决方法总结
ClassCastException(类转换异常)可能原因和解决方法总结
|
SQL 数据库
sql数据库学习多久
SQL数据库学习的时间长度因个人基础、学习目标和投入时间而异。一般来说,可以分为以下几个阶段: 1. **入门阶段**:如果每天能够投入1\\~2小时的时间去学习并动手练习,通常一周可以达到入门
2136 0
|
弹性计算 缓存 并行计算
带你读《弹性计算技术指导及场景应用》——3. Ada Lovelace架构解读及RTX 4090性能测试分析(1)
带你读《弹性计算技术指导及场景应用》——3. Ada Lovelace架构解读及RTX 4090性能测试分析(1)
631 4