资源简介
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语言程序
- c语言模拟电梯程序可视化
- linux游戏编程c语言
- 湖南大学829C语言考研真题
- C语言编写的象棋源码范例
- C语言标准库函数的源代码
- C语言实现的U盘 防火墙
- 哈夫曼编码vc++6.0
- 单片机的C语言程序设计与应用——基
- C语言流程图生成器 C语言流程图生成
- Butterworth滤波器C语言实现
- 测绘程序设计C语言描述
- C语言简化编译器前端 编译原理 LR1
- C语言编写的电子地图管理系统
- 直方图均衡化——C语言实现
- c语言停车场管理收费系统
- 合泰单片机C语言教程
- 基于单片机的多路温控系统
- C语言教程很全面,很详细的一本书
- 最新真正二级C语言机试300题(含填空
- 单片机C语言库 STC89C51/52 AT89C52/51
- C语言数据结构严蔚敏版魔王语言
- C语言-CodeBlocks-学生成绩管理系统.zi
- C语言经典算法大全
- C语言流程图生成器56102
- C语言socket实现文件
- 基于A*算法的十五数码程序 C语言版
- 餐饮管理系统源代码(亲测)
- 编程精粹:编写高质量C语言代码中文
- C语言-ATM机模拟系统exe及源码
评论
共有 条评论