文件加解密—解密版
2016-01-19 23:05
253 查看
接着上一篇 将函数改改就可演变出解密版的 ,代码如下:
#include "stdafx.h" #include "des.h" #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string> #include <stdio.h> #pragma warning(disable:4996) int FileSymEnc(const char *pfile1,const char *pfile2){ int ret = 0; FILE *fp1 = NULL, *fp2 = NULL; unsigned char plain[4096]; int plainlen = 0,plainlen2=0; unsigned char cryptbuf[4096] = { 0 }; int cryptlen = 0; fp1 = fopen(pfile1,"rb"); if (fp1 == NULL){ goto End; } fp2 = fopen(pfile2,"wb"); if (fp2 == NULL){ goto End; } //文件打开了,要拷贝数据了 while (!feof(fp1)){ plainlen=fread(plain, 1, 4096, fp1); if (feof(fp1)){//读完数据以后,判断是否文件结束 break; } //加密==4K的数据 ret = DesEnc_raw(plain, plainlen, cryptbuf, &cryptlen); if (ret != 0){ printf("func DesEnc() err:%d\n",ret); goto End; } plainlen2 = fwrite(cryptbuf, 1, cryptlen, fp2); if (plainlen2 != cryptlen){ ret = -3; printf("写文件失败,请检查是否磁盘已满\n"); goto End; } } //小于4k,就直接写 //加密 ret = DesEnc(plain,plainlen,cryptbuf,&cryptlen); if (ret != 0){ printf("func DesEnc() err:%d\n", ret); goto End; } plainlen2 = fwrite(cryptbuf, 1, cryptlen, fp2); if (plainlen2 != cryptlen){ ret = -3; printf("写文件失败,请检查是否磁盘已满\n"); goto End; } End: if (fp1 != NULL) { fclose(fp1); } if (fp2 != NULL){ fclose(fp2); } return 0; } //解密 int FileSymDec(const char *pfile1, const char *pfile2){//pfile1密文,pfile2明文 int ret = 0; FILE *fp1 = NULL, *fp2 = NULL; unsigned char plain[4096]; int plainlen = 0, plainlen2 = 0; unsigned char cryptbuf[4096] = { 0 }; int cryptlen = 0; fp1 = fopen(pfile1, "rb"); if (fp1 == NULL){ goto End; } fp2 = fopen(pfile2, "wb"); if (fp2 == NULL){ goto End; } //文件打开了,要拷贝数据了 while (!feof(fp1)){ cryptlen = fread(cryptbuf, 1, 4096, fp1); if (feof(fp1)){//读完数据以后,判断是否文件结束 break; } //解密==4K的数据 ret = DesDec_raw(cryptbuf, cryptlen, plain, &plainlen); if (ret != 0){ printf("func DesDec() err:%d\n", ret); goto End; } plainlen2 = fwrite(plain, 1, plainlen, fp2); if (plainlen != cryptlen){ ret = -3; printf("解密写文件失败\n"); goto End; } } //小于4k,就直接写 //加密 ret = DesDec(cryptbuf, cryptlen, plain, &plainlen); if (ret != 0){ printf("func DesDec() err:%d\n", ret); goto End; } plainlen2 = fwrite(plain, 1, plainlen, fp2); if (plainlen2 != plainlen){ ret = -3; printf("解密时失败,请检查是否磁盘已满\n"); goto End; } End: if (fp1 != NULL) { fclose(fp1); } if (fp2 != NULL){ fclose(fp2); } return 0; } void main(){ int ret = 0; const char *file1 = "f:/normalBayes.txt"; const char *file2 = "f:/normalBayesenc.txt"; const char *file3 = "f:/normalBayesdec.txt"; ret = FileSymEnc(file1,file2); ret = FileSymDec(file2,file3); if (ret != 0){ printf("FileSymEnc err.\n"); } return; }
相关文章推荐
- Java中的装箱,拆箱详解
- ASP.NET Web API中通过ETag实现缓存
- memcached源码分析-----item过期失效处理以及LRU爬虫
- 寒假比赛训练(持续更新)
- 自己手写使用python爬取糗事百科段子
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- 不同区域控制器名称相同出错的解决方法(备忘)
- Activity切换动画overridePendingTransition
- CSS3网格布局基础知识 - 弹性尺寸的定义单位:fr 简介及实例
- android144 360 快捷方式
- 89. cURL
- Hibernate 分页查询
- Verilog杂谈
- Java接口与抽象类的区别
- HDU 1160 FatMouse's Speed
- iOSUI-UIScrollView属性,方法大全
- 16-Ajax学习之什么是Ajax,Ajax原理
- 【IOS学习基础】weak和strong、懒加载、循环引用
- PHP Timer 页面运行时间监测类
- 安装配置 redis