资源简介
C语言编写的,利用下CryptoAPI加密系统,代码有详细注释。

代码片段和文件信息
#include “stdafx.h“
#include “Common.h“
//========================================================================
//加/解密文件函数
BOOL EncryptOrDecryptFile(BOOL flag PCHAR srcFileName PCHAR dstFileName PCHAR password)
{
//--------------------------------------------------------------------
// 变量定义
FILE *srcFile;
FILE *dstFile;
HCRYPTPROV hCryptProv;
HCRYPTKEY hKey;
PBYTE buffer;
DWORD blockLen;
DWORD bufferLen;
DWORD count;
//--------------------------------------------------------------------
//获得一个CSP句柄
hCryptProv = GetCryptProvHandle();
//--------------------------------------------------------------------
// 创建一个会话密钥(Session Key);
// 会话密钥也叫对称密钥,用于对称加密算法。
hKey = CreateSessionKey(hCryptProv password);
//--------------------------------------------------------------------
// 因为加密算法是按ENCRYPT_BLOCK_SIZE 大小的块加密的,所以被加密的
// 数据长度必须是ENCRYPT_BLOCK_SIZE 的整数倍。
// 下面设定每一次加密的数据长度。
blockLen = 1000 - 1000 % ENCRYPT_BLOCK_SIZE;
//--------------------------------------------------------------------
//如果使用块编码,则需要额外空间
if(ENCRYPT_BLOCK_SIZE > 1)
bufferLen = blockLen + ENCRYPT_BLOCK_SIZE;
else
bufferLen = blockLen;
//--------------------------------------------------------------------
// 为buffer分配内存
buffer = (BYTE *)malloc(bufferLen);
//--------------------------------------------------------------------
// 打开源文件
if(srcFile = fopen(srcFileName“rb“))//r:读,b:二进制
{
printf(“成功打开源文件 %s. \n“ srcFileName);
}
else
{
HandleError(“打开源文件时出错!“);
}
//--------------------------------------------------------------------
// 打开目标文件,如果不存在则创建之
if(dstFile = fopen(dstFileName“wb“))//w:写,b:二进制
{
printf(“成功打开目标文件 %s. \n“ dstFileName);
}
else
{
HandleError(“打开目标文件时出错!“);
}
// 循环读取源文件内容块,加密内容块并写入到目标文件。
do
{
count = fread(buffer 1 blockLen srcFile);//读取一块到buffer,返回字节数
if(ferror(srcFile))
{
HandleError(“读取源文件时出错!\n“);
}
//--------------------------------------------------------------------
if (flag == RUN_ENCRYPT)
{
// 加密buffer中的数据
if(!CryptEncrypt(
hKey //会话密钥
0 //如果数据同时进行散列和加密,这里传入一个散列对象
feof(srcFile) //如果是最后一个被加密的块,输入TRUE.如果不是输入FALSE.
//这里通过判断是否到文件尾来决定是否为最后一块。
0 //保留
buffer //输入被加密数据,输出加密后的数据
&count //输入被加密数据实际长度,输出加密后数据长度
bufferLen)) //buffer的大小。
{
HandleError(“调用函数CryptEncrypt时出错. \n“);
}
}
if (flag == RUN_DECRYPT)
{
// 解密buffer中的数据
if(!CryptDecrypt(hKey 0 feof(srcFile) 0 buffer &count))
{
HandleError(“调用函数CryptDecrypt时出错!“);
}
}
//--------------------------------------------------------------------
// 将加密后的buffer数据写入到目标文件中
fwrite(buffer 1 count dstFile);
if(ferror(dstFile))
{
HandleError(“写入目标文件时出错!“);
}
} while(!feof(srcFile));
//--------------------------------------------------------------------
// 释放相关资源
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-04-13 00:56 EncryptFileDemo\
目录 0 2015-04-13 01:49 EncryptFileDemo\Common\
文件 5937 2015-04-13 01:48 EncryptFileDemo\Common\Common.cpp
文件 692 2015-04-13 01:49 EncryptFileDemo\Common\Common.h
目录 0 2015-04-18 18:40 EncryptFileDemo\EncryptFile\
目录 0 2015-04-15 10:00 EncryptFileDemo\EncryptFile\Debug\
文件 44134 2013-12-31 11:57 EncryptFileDemo\EncryptFile\Debug\Common.obj
文件 0 2013-12-31 11:57 EncryptFileDemo\EncryptFile\Debug\Common.sbr
文件 2860032 2013-12-31 11:57 EncryptFileDemo\EncryptFile\Debug\EncryptFile.bsc
文件 196727 2013-12-31 11:57 EncryptFileDemo\EncryptFile\Debug\EncryptFile.exe
文件 230964 2013-12-31 11:57 EncryptFileDemo\EncryptFile\Debug\EncryptFile.ilk
文件 1811244 2015-04-15 10:00 EncryptFileDemo\EncryptFile\Debug\EncryptFile.pch
文件 508928 2013-12-31 11:57 EncryptFileDemo\EncryptFile\Debug\EncryptFile.pdb
文件 0 2013-12-31 11:57 EncryptFileDemo\EncryptFile\Debug\EncryptFile.sbr
文件 2591 2013-12-30 10:45 EncryptFileDemo\EncryptFile\Debug\StdAfx.obj
文件 4204 2013-12-30 10:45 EncryptFileDemo\EncryptFile\Debug\StdAfx.sbr
文件 156672 2015-04-15 10:00 EncryptFileDemo\EncryptFile\Debug\vc60.idb
文件 167936 2015-04-15 10:00 EncryptFileDemo\EncryptFile\Debug\vc60.pdb
文件 7002 2015-04-15 10:00 EncryptFileDemo\EncryptFile\EncryptFile.cpp
文件 3461 2015-04-15 09:58 EncryptFileDemo\EncryptFile\EncryptFile.dsp
文件 530 2015-04-15 10:13 EncryptFileDemo\EncryptFile\EncryptFile.dsw
文件 50176 2015-04-15 10:13 EncryptFileDemo\EncryptFile\EncryptFile.ncb
文件 48640 2015-04-15 10:13 EncryptFileDemo\EncryptFile\EncryptFile.opt
文件 3196 2015-04-15 10:00 EncryptFileDemo\EncryptFile\EncryptFile.plg
文件 1238 2013-12-03 22:43 EncryptFileDemo\EncryptFile\ReadMe.txt
目录 0 2015-04-13 00:56 EncryptFileDemo\EncryptFile\Release\
文件 5000 2013-12-30 10:45 EncryptFileDemo\EncryptFile\Release\Common.obj
文件 49152 2013-12-30 10:45 EncryptFileDemo\EncryptFile\Release\EncryptFile.exe
文件 5866 2013-12-30 10:45 EncryptFileDemo\EncryptFile\Release\EncryptFile.obj
文件 203808 2013-12-30 10:45 EncryptFileDemo\EncryptFile\Release\EncryptFile.pch
文件 282 2013-12-30 10:45 EncryptFileDemo\EncryptFile\Release\StdAfx.obj
............此处省略7个文件信息
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论