日期:2014-05-17 浏览次数:20916 次
#pragma once
#include <Windows.h>
#include <WinCrypt.h>
#define MAKE_KEYLENGTH(len)\
(len<<0x10)
//AES算法封装类
class CAESAlg
{
public:
CAESAlg(void);
public:
virtual ~CAESAlg(void);
public:
// 初始化
BOOL Init(PBYTE pbPassword, DWORD dwLen, DWORD dwBlockSize=128);
// 加密函数
BOOL Encrypt(PBYTE pBuffer, DWORD dwBufferSize, LPDWORD pdwDataLen);
// 解密函数
BOOL Decrypt(PBYTE pData, LPDWORD pdwDataLen);
private:
// CSP对象的句柄
HCRYPTPROV _hCryptProc;
// 加密解密密钥
HCRYPTKEY _hKey;
// 块大小
DWORD _dwBlockSize;
};
#include "StdAfx.h"
#include "AESAlg.h"
CAESAlg::CAESAlg(void)
: _dwBlockSize(16),
_hCryptProc(NULL),
_hKey(NULL)
{
}
CAESAlg::~CAESAlg(void)
{
if(_hKey)
{
CryptDestroyKey(_hKey);
_hKey=NULL;
}
if (_hCryptProc)
{
CryptReleaseContext(_hCryptProc,0);
_hCryptProc=NULL;
}
}