手撕文件加密-解密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 手撕文件加密-解密
//文件解密--解密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

相关文章
|
6月前
|
Linux 定位技术 iOS开发
【Python实现坦克大战,带你找回童年的快乐】附源码
【Python实现坦克大战,带你找回童年的快乐】附源码
163 0
|
缓存 调度
手撕代码系列(四)
手撕代码系列(四)
|
C语言
深夜手撕三角
深夜手撕三角
33 0
|
前端开发 数据库
贼无聊的文章
贼无聊的文章
41 0
|
小程序 Windows
电脑可以刷微信朋友圈,这下能更好地摸鱼了?
电脑可以刷微信朋友圈,这下能更好地摸鱼了?
|
C语言
无敌!我用【C语言】手搓出了一个体系完整的【员工管理系统】还能玩游戏听音乐?(超详细,附完整源码)
前言:员工管理系统是一款面向公司管理员的管理工具,旨在提供员工信息管理、薪资管理、员工绩效评估、员工福利管理和智能推荐等功能,帮助公司管理员更好地管理员工信息和提高员工工作效率。 这是总体设计大概模型图:
139 0
|
前端开发 算法
看了涡流大佬的面试文章的总结(手撕代码 & 算法)
看了涡流大佬的面试文章的总结(手撕代码&算法)
|
程序员 Android开发 iOS开发
程序员五一修图小贴士
程序员五一修图小贴士
153 0
程序员五一修图小贴士
|
小程序 数据库
喜欢看球,那就手撸一个看球小程序系统
一,系统展示;二,小程序端代码;三,后端代码;四,数据库;五,手把手教你学习
115 0
喜欢看球,那就手撸一个看球小程序系统
|
机器学习/深度学习 编解码 算法
让 GLEAN 还原你女神的美妙容颜
在 CVPR 2021, 我们提出了 GLEAN, 利用预训练的 StyleGAN 作为 latent bank, 提高图像超分辨率的效能。当时,GLEAN 在 Bicubic 下采样获得非常好的效果。 之后,我们向前踏出一步,在真实人脸复原上作出尝试。今天,我们就在这里分享一下我们现在的进展。
312 0
让 GLEAN 还原你女神的美妙容颜