资源简介
/*
*由于多方尝试并编写Openssl对文件的加解密方法,均以失败告终,所以我们小组绝对采用新的加密算法,即Windows CrytoAPI,由微软公司提出的一种安全
*加密应用服务框架
*CryptoAPI数据加解密,它的流程为:
*(加密模块)1.创建会话密钥 2.加密数据 3.安全保存或交换会话密钥
*(解密模块)1.获取会话密钥 2.解密数据
*它的加密是基于对称加密算法的(对称算法加密解密速度快),对文件的读取都要用的c语言的方法,c++的文件读取功能不好用啊
*经过测试,该算法可以对txt/doc进行加解密,其他我还没测试,你们可以试试其他文本类型看看
*/
代码片段和文件信息
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#include
#include
#include
#include
#include
#include
#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
#define KEYLENGTH 0x00800000
#define ENCRYPT_ALGORITHM CALG_RC4
#define ENCRYPT_BLOCK_SIZE 8
#include
#include “Dec.h“
/*
功能:解密密文szSource文件,解密后的数据存储到szDestination文件中
*/
BOOL Dec::DecryptFile(
PCHAR szSource //密文文件名
PCHAR szDestination //解密后数据存储文件
PCHAR szPassword) //口令,即密码,其实口令和密码是两回事,了解一下就行了,作用一样
{
//--------------------------------------------------------------------
// 局部变量申明与初始化.
FILE *hSource;
FILE *hDestination;
HCRYPTPROV hCryptProv;
HCRYPTKEY hKey;
PBYTE pbBuffer;
DWORD dwBlockLen;
DWORD dwBufferLen;
DWORD dwCount;
BOOL status = FALSE;
//--------------------------------------------------------------------
// 打开密文文件.
if(!(hSource = fopen(szSource“rb“)))
{
cout<<“打开密文文件出错!“< }
//--------------------------------------------------------------------
// 打开目标文件,用于存储解密后的数据.
if(!(hDestination = fopen(szDestination“wb“)))
{
cout<<“打开明文文件出错!“< }
//获取加密服务者句柄
hCryptProv = GetCryptProv();
//获取或创建会话密钥
if(!szPassword|| strcmp(szPassword““)==0 )
{
//--------------------------------------------------------------------
//从密文文件导入保存的会话密钥
hKey = GenKeyFromFile( hCryptProvhSource);
}
else
{
//--------------------------------------------------------------------
// 通过输入密码重新创建会话密钥.
hKey=GenKeyByPassword( hCryptProv szPassword);
}
// 计算一次解密的数据长度,它是ENCRYPT_BLOCK_SIZE 的整数倍
dwBlockLen = 1000 - 1000 % ENCRYPT_BLOCK_SIZE;
dwBufferLen = dwBlockLen;
//--------------------------------------------------------------------
// 分配内存空间.
if(!(pbBuffer = (BYTE *)malloc(dwBufferLen)))
{
cout<<“所需内存不够!“< }
//--------------------------------------------------------------------
// 解密密文文件,解密后数据保存在目标文件
do {
//--------------------------------------------------------------------
// 每次从密文文件中读取dwBlockLen字节数据.
dwCount = fread(
pbBuffer
1
dwBlockLen
hSource);
if(ferror(hSource))
{
cout<<“读取密文文件出错!“< }
//--------------------------------------------------------------------
// 解密 数据
if(!CryptDecrypt(
hKey
0
feof(hSource)
0
pbBuffer
&dwCount))
{
cout<<“解密数据时出错!“< }
//--------------------------------------------------------------------
// 把解密后的数据写入目标文件中.
fwrite(
pbBuffer
1
dwCount
hDestination);
if(ferror(hDestination))
{
cout<<“把解密后的数据写入目标文件中时出错!“< }
} while(!feof(hSource));
status = TRUE;
//--------------------------------------------------------------------
// 关闭文件
if(hSource)
{
if(f
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1004054 2010-05-06 23:00 加解密文件\测试截图\解密图片.bmp
文件 988090 2010-05-06 22:59 加解密文件\测试截图\加密图片.bmp
文件 524 2010-05-06 19:42 加解密文件\DecAndEnc\DecAndEnc.dsw
文件 82944 2010-10-09 00:06 加解密文件\DecAndEnc\DecAndEnc.ncb
文件 1328 2010-05-06 22:56 加解密文件\DecAndEnc\DecAndEnc.plg
文件 582 2010-05-06 20:23 加解密文件\DecAndEnc\Enc.h
文件 1083 2010-05-06 21:19 加解密文件\DecAndEnc\get_mac.cpp
文件 1860 2010-05-06 21:39 加解密文件\DecAndEnc\get_mac.h
文件 4549 2010-05-06 22:20 加解密文件\DecAndEnc\DecAndEnc.dsp
文件 7106 2010-05-06 22:34 加解密文件\DecAndEnc\Dec.cpp
文件 718 2010-05-06 22:34 加解密文件\DecAndEnc\Dec.h
文件 6747 2010-05-06 22:36 加解密文件\DecAndEnc\Enc.cpp
文件 0 2010-05-06 22:55 加解密文件\DecAndEnc\e.txt
文件 4125 2010-05-06 22:56 加解密文件\DecAndEnc\test.cpp
文件 599040 2010-05-06 22:56 加解密文件\DecAndEnc\Debug\DecAndEnc.pdb
文件 295936 2010-05-06 22:58 加解密文件\DecAndEnc\Debug\vc60.idb
文件 94208 2010-05-06 22:56 加解密文件\DecAndEnc\Debug\vc60.pdb
文件 12568 2010-05-06 21:19 加解密文件\DecAndEnc\Debug\get_mac.obj
文件 1067298 2010-05-06 22:34 加解密文件\DecAndEnc\Debug\Dec.sbr
文件 1067056 2010-05-06 22:36 加解密文件\DecAndEnc\Debug\Enc.sbr
文件 1066843 2010-05-06 22:56 加解密文件\DecAndEnc\Debug\test.sbr
文件 3220480 2010-05-06 21:43 加解密文件\DecAndEnc\Debug\DecAndEnc.bsc
文件 229435 2010-05-06 22:56 加解密文件\DecAndEnc\Debug\DecAndEnc.exe
文件 25927 2010-05-06 22:34 加解密文件\DecAndEnc\Debug\Dec.obj
文件 309080 2010-05-06 22:56 加解密文件\DecAndEnc\Debug\DecAndEnc.ilk
文件 24675 2010-05-06 22:36 加解密文件\DecAndEnc\Debug\Enc.obj
文件 5035792 2010-05-06 22:36 加解密文件\DecAndEnc\Debug\DecAndEnc.pch
文件 23206 2010-05-06 22:56 加解密文件\DecAndEnc\Debug\test.obj
文件 68608 2010-10-09 00:06 加解密文件\DecAndEnc\DecAndEnc.opt
目录 0 2010-05-06 23:01 加解密文件\DecAndEnc\Debug
............此处省略6个文件信息
- 上一篇:已编译的GDAL gdal111
- 下一篇:sbc codec的C++实现
评论
共有 条评论