文件打包加密和解包解密

提示:这里记录上一章提到的加密解密进行一个进阶的
打包+加密 —— + ——解包+解密


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

加密解密+打包解包

  • 文件打包加密和解包解密
  • 思路
  • 一、怎么加密?
  • 二、使用步骤
    • 1.加密打包
    • 2.解密解包
  • 笔记总结

思路

提示:这里分享一下思路记录的大概内容:
打包加密

  1. //创建打包文件
  2. //循环读取待打包文件
  3. //打包_将读取的数据存储到打包文件里
  4. //保存关闭
  5. //将打包好的文件进行加密
  6. //关闭保存

解包解密:

  1. //读取加密文件
  2. //将读取到的内容进行解密并写入各自对应的文件
  3. //进行解包
  4. //保存关闭

提示:以下是本篇文章正文内容,下面案例可供参考

一、怎么加密?

用运算符,上一章讲到,或者用其他自定义算法都可以。

二、使用步骤

1.加密打包

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#include<easyx.h>
//创建结构体存储打包关键信息
struct MyDbJm
{char FileName[256];int FileSize;
};
int mlqz(double a);
void quit(int n);int main(int argc, char* argv[])
{int key;printf("请输入加密密钥:");scanf("%d", &key);int Num = argc - 1;srand((unsigned int)time(NULL));//建立结构体数组struct MyDbJm* FileIofos = (struct MyDbJm*)malloc(Num * sizeof(struct MyDbJm));FILE* XxCc;/*输出1*/printf("本次打包数量%d个\n", argc - 1);printf("正在开始打包...\n");double jindu=NULL; //文件总大小double JDbl = NULL;//一个初始值,最大等于文件大小double Bai = NULL;//待定//赋值for (int i = 0; i < Num; i++){strcpy(FileIofos[i].FileName, argv[i + 1]);//拷贝文件名  文件名赋值XxCc = fopen(FileIofos[i].FileName, "rb");//读取拷贝这个文件fseek(XxCc, 0, SEEK_END);  //SEEK_SET  从文件头开始 SEEK_CUR  从当前位置 SEEK_END 从文件尾  FileIofos[i].FileSize = ftell(XxCc);//ftell获取文件内容指针到文件头的字节数jindu += FileIofos[i].FileSize;fclose(XxCc);//关闭文件}/*创建打包文件*/char buff[32] = { NULL };sprintf(buff, "./%c%d%c%c%c%c_%d%c.520XC",//随机文件名rand() % 26 + 'a', rand() % 10, rand() % 26 + 'A', rand() % 30 + 'a', rand() % 32 + 'a', rand() % 26 + 'a', rand() % 10, rand() % 38 + 'a');FILE* XCdata = fopen(buff, "wb");//打包创建//写入内容// 1 文件个数fwrite(&Num, 1, sizeof(int), XCdata);// 2 文件信息 fwrite(FileIofos, 1, Num * sizeof(struct MyDbJm), XCdata);// 3 文件内容int r;char temp;JDbl = 0;for (int n = 0; n < Num; n++){XxCc = fopen(FileIofos[n].FileName, "rb");//读取拷贝这个文件while (1) { r = fread(&temp, 1, 1, XxCc);//向打包文件写入数据if (1 == r) {fwrite(&temp, 1, 1, XCdata);JDbl++;}elsebreak;} fclose(XxCc);printf("\r已打包:%0.2f﹪",(JDbl/jindu)*100);}//关闭保存fclose(XCdata);printf("\n打包完成!\n正在删除原文件...\n");for (int x = 0; x < Num; x++){DeleteFile(argv[x + 1]);printf("\r删除进度:%d﹪", mlqz((x / (Num-1))* 100));Sleep(10);}Sleep(500);printf("\n删除成功!\n");//文件加密//1 创建加密文件//char nuff[32];//sprintf(nuff, "%s", buff);FILE* JM = fopen("./temp.tp", "wb");//创建加密文件FILE* ltemp = fopen(buff, "rb");//读取加密文件if (NULL == ltemp) { printf("文件打开失败!\n"); return -1; }//2 进行加密int r1;char temps;int ZJS = 0;while (1) {if (ZJS % 1024 == 0) { double test = (ZJS / jindu) * 100; if (test >= 100.00) { test = 100.00; }; printf("\r正在进行加密:%0.2f﹪", test); }r1 = fread(&temps, 1, 1, ltemp);if (r1 >= 1) {temps ^= key;   //加密fwrite(&temps, 1, 1, JM);//加密后ZJS += 1;//该文件的字节数}elsebreak;}//3 关闭文件fclose(JM);fclose(ltemp);//4 删除原来的Sleep(100);DeleteFile(buff);Sleep(100);MoveFile("temp.tp", buff);printf("\n加密成功!\n");quit(6);system("pause");return EXIT_SUCCESS;
}
//抹零取正
int mlqz(double a)
{double b;b = a;if (b <= 0) { b= b*(-1); }return b;
}
void quit(int n)
{printf("%d秒后自动退出...\n", n);for (int v = n; v >= 0; v--){printf("\r倒计时:%d秒    ", v);Sleep(1000);}printf("\n");exit(-1);
}

运行情况:

2.解密解包

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
//创建结构体存储打包解包关键信息
struct MyDbJm
{char FileName[256];int FileSize;
};
void JDt(int n);int main(int argc, char* argv[])
{   int key;printf("请输入解密密钥:");scanf("%d", &key);// 批量解密printf("本次获取到了%d个文件待解压\n",argc);double tg, kb, mb, gb, tb;tg =kb=mb=gb=tb= NULL;//统计大小 总大小double dog[4080] = { NULL };FILE* TG;for (int tgs = 1; tgs < argc;){TG = fopen(argv[tgs], "rb");if (NULL == TG) { printf("文件出错!或者文件可能已损坏!"); return -1; }int bv = 0;char map = NULL;fseek(TG, 0, SEEK_END);  //SEEK_SET  从文件头开始 SEEK_CUR  从当前位置 SEEK_END 从文件尾  bv = ftell(TG);fseek(TG, 0, SEEK_SET);  //SEEK_SET  从文件头开始 SEEK_CUR  从当前位置 SEEK_END 从文件尾  tg += bv;dog[tgs] = bv;int f;int cout = NULL;while (1){f= fread(&map, 1, 1, TG);if (f > 0) {cout++;if (gb >= 1024) { gb = 0; tb += 1; }if (mb >= 1024) { mb = 0; gb += 1; }if (kb >= 1024) { kb = 0; mb += 1; }if (cout >= 1024) { cout = 0; kb += 1; }}else break;}double bfb = (tgs / (argc - 1))*100;if (bfb < 0) { bfb *= -1; }printf("\r正在加载数据...[已加载:%0.2f KB]【%0.2f﹪】     ",(double)(tg/1024),bfb );fclose(TG);tgs++;}{printf("\n");//printf("加载成功!加载文件总大小:%0.2f KB[%0.2f mb->%0.2f gb->%0.2f tb]",kb,mb,gb,tb );if (kb > 0) { printf("加载成功!加载文件总大小:%0.2f KB", kb); }else if (mb > 0) { printf("加载成功!加载文件总大小:%0.2f MB", mb); }else if (gb > 0) { printf("加载成功!加载文件总大小:%0.2f GB", gb); }else if (tb > 0) { printf("加载成功!加载文件总大小:%0.2f TB", tb); }printf("\n");}for (int c = 1; c < argc;) {double DqJD = NULL, ZJD = NULL, Bai = NULL;//解密//文件解密printf("\n正在准备解密第%d个文件...【预计大小】[%0.2f字节]\n",c,dog[c]);//1 创建解密文件FILE* JM = fopen("temp.tp", "wb");//创建解密文件FILE* ltemp = fopen(argv[c], "rb");//读取加密文件//2 进行加密int rn;char tempn;int ZJS = 0;fseek(ltemp, 0, SEEK_END);  //SEEK_SET  从文件头开始 SEEK_CUR  从当前位置 SEEK_END 从文件尾  ZJD = ftell(ltemp);fseek(ltemp, 0, SEEK_SET);printf("正在解密中...\n文件名:%s\n大小:%0.2f KB [%0.5f MB -> %0.9f GB]\n", argv[c], (double)(ZJD / 1024),(double)(ZJD/(1024*1024)), (double)(ZJD / (1024 * 1024*1024)));while (1) {rn = fread(&tempn, 1, 1, ltemp);if (rn > 0) {tempn = tempn ^ key;//解密fwrite(&tempn, 1, 1, JM);//解密后ZJS += 1;//该文件的字节数if (ZJS % 1024 == 0) { DqJD = (ZJS / ZJD) * 100; if (DqJD >= 100.00) { DqJD = 100.00; }if (DqJD <= 0) { DqJD *= -1; }; printf("\r当前解密进度:%0.2f﹪", DqJD); }}elsebreak;}//3 关闭文件fclose(JM);fclose(ltemp);if (ZJS != ZJD) { printf("解密失败!"); return -1; }else { printf("\n解密成功!\n正在解包释放文件...\n"); }//4 删除原来的Sleep(100);DeleteFile(argv[c]);Sleep(100);MoveFile("temp.tp", argv[c]);/**********/int FileNum = NULL;//存储文件中读取的文件数量//打开打包文件FILE* JieBao = fopen(argv[c], "rb");//读取文件个数fread(&FileNum, 1, sizeof(int), JieBao);//建立结构体数组struct MyDbJm* FileIofos = (struct MyDbJm*)malloc(FileNum * sizeof(struct MyDbJm));//读取打包文件的信息fread(FileIofos, 1, FileNum * sizeof(struct MyDbJm), JieBao);FILE* XxCc;int Mycont = NULL;//声明统计字节数变量char temp = NULL;//赋值for (int i = 0; i < FileNum; i++){//1 创建解包文件XxCc = fopen(FileIofos[i].FileName, "wb");//2 循环 读取文件内容Mycont = 0;while (1){fread(&temp, 1, 1, JieBao);fwrite(&temp, 1, 1, XxCc);Mycont++;if (Mycont >= FileIofos[i].FileSize) break;}printf("\r释放情况:%0.2f﹪【%d/%d】", (double)(((i + 1) / FileNum) * 100), i + 1, FileNum);Sleep(100);//3 关闭保存fclose(XxCc);}fclose(JieBao);DeleteFile(argv[c]);printf("\n解包成功!\n");c++;}for (int i = 5; i > 0; i--) { JDt(i); Sleep(1000); }printf("\n");exit(-1);system("pause");return EXIT_SUCCESS;
}
void JDt(int n)
{printf("\r正在退出:->   ");for (int i = 0; i < n; i++){printf("█");}printf("    <-     ");
}

运行情况:

温馨提示:属性调节为多字节字符集
打包后情况预览:

属性调节:


笔记总结

提示:这里对文章进行总结:
回顾:
什么是文件 :
硬盘中存储 断电不流失
打开 关闭
读写
字符文件 字节文件:

文件的十二种打开方式fputc fgetc fputs fgets
printf scanf  gets puts getchar putchar

文件内容指针:
光标

文件读写的时候,自动调整文件内容指针
如何手动挪文件内容指针fseekoffset  偏移量正数  往后偏移负数  往前偏移origin  偏移起始位置文件头  SEEK_SET当前    SEEK_CUR文件尾  SEEK_ENDfeof:文件结束 返回 1  文件没结束 返回 0ftell:获取文件内容指针到文件头的字节数rewind:文件内容指针挪动到文件头

文件打包解包:

联合:struct 结构名{成员变量类型 成员变量名;成员变量类型 成员变量名;成员变量类型 成员变量名;};union 联合名{成员变量类型 成员变量名;成员变量类型 成员变量名;成员变量类型 成员变量名;};联合的所有成员共用同一块内存。共同体 共用体使用联合可以快速拆分
枚举:就是为了起名字一次性定义多个名字声明定义和结构体相同但使用和结构体不同,直接使用枚举成员C语言中没有bool类型:1  true  0 false添加头文件 stdbool.h位段:struct test{int n : 1;int m : 2;};为了灵活分配内存````

文件加密打包和解密解包相关推荐

  1. Linux之zip加密压缩与解密解压(一百二十一)

    Linux之zip加密压缩与解密解压 1.zip加密压缩目录 # zip -rP Abc#123 tmp.zip test/2.unzip解密解压缩 # unzip -P Abc#123 tmp.zi ...

  2. 压缩命令_Linux环境下文件压缩打包命令详解

    你好,我是goldsunC 让我们一起进步吧! 前言 我们知道,在面向对象的程序设计中,一切皆对象.而在Linux操作系统中,一切皆文件,因此我们总会跟文件打交道. Linux文件系统很庞大复杂,不过 ...

  3. MonoTouch 二三事(三)mono mkbundle 打包程序的解包支持

    2014.10.06 更新 编写了 IDA Pro 的插件,用来解包和打包 mkbundle程序,请参见 https://github.com/binsys/MKBundleManager 许久以后, ...

  4. 服务器android打包,Android rom解包打包工具

    eMMC主要是针对手机和平板电脑等产品的内嵌式存储器,由于其在封装中集成了一个控制器,且提供标准接口并管理闪存等优势,越来越受到Android手机厂商的青睐,以eMMC为存储设备的android手机, ...

  5. linux ext4 img解包打包教程,安卓解包、修改、打包system.img/system.img.ext4教程

    自从得知ROM助手可以解包IMG的文件后,再也不用安装LINUX系统来解包和打包system.img文件,这对于新手  机友朋友无疑是一个劲爆的消息,很多朋友都对安装和操作LINUX系统的繁琐望而却步 ...

  6. zip打包,unzip解包

    1.简单描述 zip用于压缩文件并将文件打包. unzip与zip相反,解包并解压缩. 2.通过例子说明zip使用方法 (1).zip命令的使用格式大致是这样的: zip zipfile file1 ...

  7. SpringBoot - resource资源文件的打包配置详解(指定资源文件位置)

    一.问题描述 (1)默认 Spring Boot 项目结构,资源文件放置在 src/main/resources 中,测试的资源文件在 src/test/resources 中. src/main/r ...

  8. android7.1解包打包工具,万能解包提取器Universal Extractor v1.7下载

    软件爱好者经常会从小众的软件站下载,尝鲜各种酷软,但是有时候难免会遇到加壳的李鬼软件,这时可以借助Universal Extractor帮你提取软件存档文件,轻松一键即可完成提取. Universal ...

  9. PPT文件加密如何进行解密

    PPT文件设置了打开密码的加密,不知道密码,但是想要打开PPT文件,这种情况就只能找破解软件尝试破解PPT文件的打开密码了 打开软件,选择[找回密码],将文件添加到软件中,选择一种找回方法,等待软件进 ...

最新文章

  1. [Java工程师面试精选]Redis cluster集群模式的原理
  2. 使用AD5933测量元器件的谐振特性
  3. android权限控制泄露,Android应用的权限泄露分析
  4. 实战SSM_O2O商铺_04自下而上逐步整合SSM
  5. poj 3295 Tautology(经典构造算法题)
  6. Linux服务器的初步配置流程
  7. python调用oracle存,Python使用cx_Oracle调用Oracle存储过程的方法示例
  8. 面向机器学习的特征工程 三、文本数据: 展开、过滤和分块
  9. 变焦什么意思_变焦镜头中的恒定光圈与浮动光圈是什么意思?萌新摄影分享指南!...
  10. OSI网络模型(TCP/IP五层模型)
  11. validation problems were found problem cvc-complex-type.2.4a
  12. html单元格竖着排列,html表格,表头竖向固定,横向滚动的例子
  13. CMMI4级——几个直接与项目管理相关的PA(PP、PMC、IPM、RSKM、QPM、CAR)
  14. Android移动开发基础案例教程第2版课后习题
  15. 如何在线批量将JPG图片转Word文件
  16. 如何将mac中的资料拷贝到U盘,移动硬盘(实用!!!)
  17. python调用谷歌翻译_python调用谷歌翻译
  18. JQuery插件二--colorbox
  19. python ip地址处理_Python学习笔记-IP地址处理模块Ipy
  20. Fly.Box 企业网盘2.2.1 发布

热门文章

  1. 计算机图形学基础:颜色模型、图像基本知识、Phong光照模型
  2. java编译成功后生成文件的扩展名_【填空题】Java源程序文件编译后产生的文件的扩展名为(不用写圆点)【1】。...
  3. 由于使用“优易U盘加密软件”导致电脑无法关机/蓝屏等解决方法
  4. python人像绘制_python 绘制三国人物关系图
  5. 【Pygame实战】好“球”推荐——“足”出精彩,追“球”健康,足不出户在家也能“踢足球”啦~
  6. Lombok 之 Data Value
  7. 计算机快捷键怎么设置方法,打开软件快捷键怎么设置 电脑软件快捷键设置教程-电脑教程...
  8. 保研经验分享 || 西北高考照顾省大学生如何大一绩点崩掉最后专业第七保研上岸C9、华五
  9. R 数据结构(Data Structures) 简介8
  10. 年月日时分秒的正则表达式