手撕文件加密-解密

简介: 手撕文件加密-解密
//文件解密--解密api调用
#define  _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "des.h"
#define   SRCFILE   "F:/config/outfile.txt"  
#define   OUTFILE   "F:/config/decrypt.txt"
int decltype_file(const char *srcfile , const char *outfile)
{
  int ret = 0;
  int srclen = 0;
  int outlen = 0;
  unsigned char filebuf[4 * 1024] = {0};
  unsigned char outbuf[4 * 1024] = { 0 };
  FILE *srcfp;
  FILE *outfp;
  srcfp = fopen(srcfile,"rb");
  if (srcfp == NULL)
  {
    ret = -1;
    printf("srcfile = fopen(srcfile)\n");
    return ret;
  }
  outfp = fopen(outfile,"wb");
  if (outfp == NULL)
  {
    ret = -2;
    printf("outfp = fopen(outfile)\n");
    return ret;
  }
  while (!feof(srcfp))
  {
    srclen = fread(filebuf,1,4096,srcfp);
    if (feof(srcfp))  //是否读到了末尾
    {
      break;
    }
    //解密
    /*int DesDec_raw(
      unsigned char *pInData,
      int            nInDataLen,
      unsigned char *pOutData,
      int           *pOutDataLen)*/
    ret = DesDec_raw(filebuf,srclen,outbuf,&outlen);
    if (ret != 0)
    {
      printf("DesDec_raw(filebuf,srclen,outbuf,&outlen)\n");
    }
    //把解密的文案写到 decrypt.txt 中
     ret = fwrite(outbuf,1,outlen,outfp);
    if (ret != outlen)
    {
      ret = -3;
      printf("fwrite(outbuf,1,outlen,outfp) error\n");
      return ret;
    }
    ret = 0;
  }
    //把剩余的部分解密
    /*int DesDec(
      unsigned char *pInData,
      int            nInDataLen,
      unsigned char *pOutData,
      int           *pOutDataLen)*/
    ret = DesDec(filebuf,srclen,outbuf,&outlen);
    if (ret != 0)
    {
      printf("DesDec(srcfile,srclen,outbuf,&outlen) error:%d\n",ret);
    }
    ret = fwrite(outbuf,1,outlen,outfp);
    if (ret != outlen)
    {
      ret = -5;
      printf("fwrite(outbuf, 1, outlen, outfp) error\n");
      return ret;
    }
    ret = 0;
    fclose(srcfp);
    fclose(outfp);
    return ret;
}
int main()
{
  int ret = 0;
  const char *srcfile = SRCFILE;
  const char *outfile = OUTFILE;
  ret = decltype_file(srcfile,outfile);
  if (ret != 0)
  {
    printf("decltype_file(srcfile,outfile) error:%d\n",ret);  
  }
  printf("解密成功!\n");
  return  0;
}
//问价加密--api借口的调用
#define  _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "des.h"
#define   SRCFILE   "F:/config/srcfile.txt"
#define   OUTFILE   "F:/config/outfile.txt"
int encryption_file(const char *src , const char *out)
{
  int   ret = 0;
  int   pinlen = 0;
  int   poutlen;
  FILE  *srcfp;
  FILE  *outfp;
  unsigned char inbuf[4 * 1024];
  unsigned char outbuf[4  * 1024];
  srcfp = fopen(src,"rb");  //打开一个二进制文件
  if (srcfp == NULL)
  {
    ret = -1;
    printf("srcfp = fopen(src):error\n");
    return ret;
  }
  outfp = fopen(out,"w+b");
  if (outfp == NULL)
  {
    ret = -2;
    printf("outfp = fopen(src):error\n");
    return ret;
  }
  //不断的取文件
  while (!feof(srcfp))
  {
    //读取部分数据
    pinlen = fread(inbuf,1,4096,srcfp); //pinlen-->读取的总数,如果pinlen!=4096,失败
    if (feof(srcfp))
    {
      break;
    }
    /*int DesEnc_raw(
      unsigned char *pInData,
      int            nInDataLen,
      unsigned char *pOutData,
      int           *pOutDataLen)*/
    ret = DesDec_raw(inbuf,pinlen,outbuf,&poutlen);
    if (ret != 0)
    {
      printf("DesDec_raw(inbuf,pinlen,outbuf,&poutlen) error:%d\n",ret);
      return ret;
    }
    //加密完成的数据放到file2中
    ret = fwrite(outbuf,1,poutlen,outfp);
    if (ret != poutlen)
    {
      ret = -2;
      printf("加密文件写入失败!fwrite(outbuf,1,poutlen,outfp)");
      return ret;
    }
    ret = 0;
  }
  //对剩余的部分 小于4K 进行加密
  /*int DesEnc(
    unsigned char *pInData,
    int            nInDataLen,
    unsigned char *pOutData,
    int           *pOutDataLen)*/
  ret = DesEnc(inbuf, pinlen, outbuf, &poutlen);
  if (ret != 0)
  {
    printf("DesEnc(inbuf, pinlen, outbuf, poutlen) error:%d\n",ret);
    return ret;
  }
  ret = fwrite(outbuf,1,poutlen,outfp);
  if (ret != poutlen)
  {
    ret = -5;
    printf("fwrite() error\n");
    return ret;
  }
  ret = 0;
  fclose(srcfp);
  fclose(outfp);
  return ret;
}
int main()
{
  const char *srcfile = SRCFILE;    //源文件
  const char *outfile = OUTFILE;    //加密后的文件
  int ret = 0;
  ret = encryption_file(srcfile,outfile);
  if (ret != 0)
  {
    printf("encryption_file error:%d\n",ret);
    return 0;
  }
  printf("文件加密完成\n");
  return 0;
}

相关文件配置:

               链接:https://pan.baidu.com/s/1irALQnQzDqaa-8ZBRAasjg 

               提取码:chen

相关文章
|
存储 负载均衡 数据库
VTP技术(一)
VTP技术(一)
588 0
|
11月前
|
机器学习/深度学习 人工智能 PyTorch
官宣:Ray 正式加入 PyTorch 基金会
https://www.anyscale.com/blog/ray-by-anyscale-joins-pytorch-foundation 译文
|
人工智能 自然语言处理 架构师
AI 自动化智能体训练营
本课程专为想提升效率、探索副业的职场人、创业者及内容创作者设计,零基础可学。4周系统掌握AI生成文案、PPT、图表,自动化运营与多平台分发,打造24小时赚钱智能体,实现降本增效与个人变现双赢。
|
人工智能 安全 数据可视化
安全测试平台的选型标准与搭建思路
随着企业安全需求升级,传统漏洞扫描和渗透测试已无法满足要求。构建安全测试平台(STP)成为趋势,实现漏洞扫描、权限评估、接口测试等工作的平台化运营。本文从选型标准、平台架构、模块功能等六个方面,系统讲解如何搭建企业级安全测试平台,提升安全能力。
|
数据采集 传感器 监控
LabVIEW在SpaceX的应用
LabVIEW在SpaceX的应用
408 0
|
存储 算法 虚拟化
理解镜像文件
镜像文件根据其用途和格式的不同,可以分为多种类型。常见的镜像文件类型包括: ISO镜像:主要用于存储光盘(如CD、DVD)的内容。ISO镜像文件能够完整地复制光盘上的所有数据,包括文件系统、目录结构、文件内容以及权限设置等。 VHD(Virtual Hard Disk)镜像:是微软虚拟机(如Hyper-V)使用的虚拟硬盘文件格式。它用于存储虚拟机操作系统和应用程序的数据。 IMG镜像:一种通用的镜像文件格式,可用于存储多种类型的数据,包括磁盘分区、整个磁盘、文件系统等。 WIM(Windows Imaging Format)镜像:是微软用于部署Windows操作系统的镜像文件格式。它支持对多个
2410 8
|
IDE 开发工具 Python
用Python绘制一只懒羊羊
本教程介绍如何使用Python和Turtle图形库绘制可爱的懒羊羊。Turtle是Python内置的简单绘图工具,适合初学者。我们通过导入Turtle库、设置画布、绘制头部、眼睛、嘴巴、身体和四肢等步骤,逐步完成懒羊羊的绘制。每个部分都用简单的代码指令实现,最终展示一个完整的懒羊羊图案。通过这个实践,你不仅能学会Turtle的基本用法,还能加深对编程绘图的理解。
896 4
|
前端开发 安全 UED
React 文件预览组件:File Preview
在现代Web应用中,文件上传和预览功能至关重要。本文基于React库,详细介绍如何构建文件预览组件,涵盖文件选择器、图片预览、文件大小限制及多种文件类型支持。通过实际代码示例,解析常见问题如跨域请求、文件路径处理和状态管理,并提供解决方案。帮助开发者提升用户体验,减少误操作。
1149 2
|
存储 Perl
如何使用awk处理CSV文件?
【10月更文挑战第16天】如何使用awk处理CSV文件?
816 3