c语言 加密\解密文件(文件操作常用函数使用)

文章目录

  • 1、加密\解密API使用
  • 2、文件加密\解密

1、加密\解密API使用

加解密源文件下载:

https://download.csdn.net/download/weixin_45715405/34263462?spm=1001.2014.3001.5501

源代码,共两个文件,des.c 、des.h,引入des.h就可以使用了

#include 
#include 
#include "des.h"
#include int main(void)
{// buf需要加密的数据// dst加密之后的数据unsigned char buf[] = "abcde";unsigned char dst[100] = {0};int dstLen = 0;/* 加密enc参数:buf需要加密数据strlen(buf)加密数据长度dst 加密之后dstLen加密之后的密文长度返回值:成功:0 失败:不为0*/int ret = DesEnc(buf,strlen(buf),dst,&dstLen);if(ret != 0 ){fprintf(stderr,"加密失败%d\n",ret);exit(1);}printf("ret = %d,dst=%s dstlen=%d\n",ret,dst,dstLen);/* 解密des参数:dst 密文dstLen 密文参数buf 解密之后的明文存放地方len 解密之后的明文长度返回值:成功:0 失败:不为0*/int len = 0;ret = DesDec(dst,dstLen,buf,&len);if(ret != 0){fprintf(stderr,"解密失败%d\n",ret);exit(1);}printf("ret =%d,buf=%s len=%d\n",ret,buf,len);return 0;
}

2、文件加密\解密

#include 
#include 
#include "des.h"
#include #define SIZE 4096
void menu()
{printf("================\n");printf("1、加密文件\n");printf("2、解密文件\n");printf("3、清屏\n");printf("4、退出\n");printf("================\n");
}void EncFile()
{   // 以4k大小读文件 FILE* rFd = NULL;FILE* wFd = NULL;char rPath[512] = {0}; // 源文件路径,需要加密char wPath[512] = {0}; // 目标路径,保持加密后的文件unsigned char srcBuf[SIZE] = {0}; // 4kint rLen = 0;unsigned char dstBuf[SIZE] = {0}; // 4kint wLen = 0;int ret = 0;printf("请输入需要加密的文件:");scanf("%s",rPath);printf("请输入加密后的文件:");scanf("%s",wPath);// 已读方式打开需要加密的文件rFd = fopen(rPath,"rb");if(rFd == NULL){perror("fopen error rPath");goto End;}// 已写方式打开加密后的文件wFd = fopen(wPath,"wb");if(wFd == NULL){perror("fopen error wPath");goto End;}// 循环读取文件while(1){rLen = fread(srcBuf,1,SIZE,rFd);if(rLen < SIZE) // 小于4k跳出{break;}// 下来说明,读到4k数据了ret = DesEnc_raw(srcBuf,rLen,dstBuf,&wLen);if(ret !=0 ){printf("DesEnc_raw等于4k失败\n");goto End;}// 写加密后的文件ret = fwrite(dstBuf,1,wLen,wFd);if(ret != wLen){printf("写加密失败\n");goto End;}}// 小于4k文件ret = DesEnc(srcBuf,rLen,dstBuf,&wLen);if(ret !=0 ){printf("DesEnc_raw等于4k失败\n");goto End;}// 写加密后的文件ret = fwrite(dstBuf,1,wLen,wFd);if(ret != wLen){printf("写加密失败\n");goto End;}End:if(rFd != NULL){fclose(rFd);}if(wFd != NULL){fclose(wFd);}
}void DecFile()
{// 以4k大小读文件 FILE* rFd = NULL;FILE* wFd = NULL;char rPath[512] = {0}; // 源文件路径,需要解密char wPath[512] = {0}; // 目标路径,保持解密后的文件unsigned char srcBuf[SIZE] = {0}; // 4kint rLen = 0;unsigned char dstBuf[SIZE] = {0}; // 4kint wLen = 0;int ret = 0;printf("请输入需要解密的文件:");scanf("%s",rPath);printf("请输入解密后的文件:");scanf("%s",wPath);// 已读方式打开需要加密的文件rFd = fopen(rPath,"rb");if(rFd == NULL){perror("fopen error rPath");goto End;}// 已写方式打开加密后的文件wFd = fopen(wPath,"wb");if(wFd == NULL){perror("fopen error wPath");goto End;}// 循环读取文件while(1){rLen = fread(srcBuf,1,SIZE,rFd);if(rLen < SIZE) // 小于4k跳出{break;}// 下来说明,读到4k数据了ret = DesDec_raw(srcBuf,rLen,dstBuf,&wLen);if(ret !=0 ){printf("DesEnc_raw等于4k失败\n");goto End;}// 写加密后的文件ret = fwrite(dstBuf,1,wLen,wFd);if(ret != wLen){printf("写加密失败\n");goto End;}}// 小于4k文件ret = DesDec(srcBuf,rLen,dstBuf,&wLen);if(ret !=0 ){printf("DesEnc_raw等于4k失败\n");goto End;}// 写加密后的文件ret = fwrite(dstBuf,1,wLen,wFd);if(ret != wLen){printf("写加密失败\n");goto End;}End:if(rFd != NULL){fclose(rFd);}if(wFd != NULL){fclose(wFd);}
}int main(void)
{   int cmd;while (1){menu();printf("cmd:");scanf("%d",&cmd);switch (cmd){case 1:EncFile();break;case 2:DecFile();break;case 3:system("clear");break;default:exit(0);break;}}return 0;
} 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部