• 大小: 1.81MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-01
  • 语言: C/C++
  • 标签: C语言  CryptoAPI  

资源简介

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个文件信息

评论

共有 条评论