CryptEncrypt 和CryptDecrypt 的使用

来源:互联网 发布:淘宝能卖药品吗 编辑:程序博客网 时间:2024/05/16 17:39

/********************************************************************created:2014/08/25created:25:8:2014   15:24file ext:cppauthor:Benpurpose:简单的演示下windows API 的加解密函数的使用Remarks:*********************************************************************/#include "stdafx.h"#include<windows.h>#include <wincrypt.h>#include<iostream>using namespace std;HCRYPTPROVm_hCryptProv; HCRYPTKEYm_hKey; HCRYPTHASHm_hHash; #define KEYCONTAINER _T("BenTestKeyContainer")#define KEYLENGTH  0x00800000BOOL CreateCryptSession(LPTSTR tszPassword){//---------------------------------------------------------------// Get the handle to the default provider. if (m_hCryptProv == NULL){if(!CryptAcquireContext(&m_hCryptProv, KEYCONTAINER, MS_ENHANCED_PROV, PROV_RSA_FULL, 0)){if (GetLastError() == NTE_BAD_KEYSET){if(!CryptAcquireContext(&m_hCryptProv, KEYCONTAINER, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET)){return FALSE;}}else{return FALSE;}}}//-----------------------------------------------------------// Create a hash object. if (m_hHash == NULL){if(!CryptCreateHash(m_hCryptProv, CALG_MD5, 0, 0, &m_hHash)){return FALSE;}}//-----------------------------------------------------------// Hash in the password data. if(m_hKey) {CryptDestroyKey(m_hKey); m_hKey = NULL;}if(!CryptHashData(m_hHash, (BYTE *)tszPassword, _tcslen(tszPassword) * sizeof(TCHAR), 0)) {return FALSE;}//-----------------------------------------------------------// Derive a session key from the hash object. if(!CryptDeriveKey(m_hCryptProv, CALG_RC4, m_hHash, KEYLENGTH, &m_hKey)){ return FALSE;}return TRUE;}BOOL DestroyCryptSession(){//--------------------------------------------------------------------// Destroy session key. if(m_hKey) {CryptDestroyKey(m_hKey); m_hKey = NULL;}//--------------------------------------------------------------------// Destroy hash object. if(m_hHash) {CryptDestroyHash(m_hHash); m_hHash = NULL;}//--------------------------------------------------------------------// Release provider handle. if(m_hCryptProv) {CryptReleaseContext(m_hCryptProv, 0); m_hCryptProv = NULL;}return TRUE;}BOOL EncryptData(PBYTE pbBuffer, DWORD dwBufferLen, LPDWORD lpdwCount, BOOL bFinal=FALSE){if (m_hKey == NULL || pbBuffer == NULL || dwBufferLen == 0 || lpdwCount == NULL){return FALSE;}//-----------------------------------------------------------// Encrypt data. return CryptEncrypt(m_hKey, NULL, bFinal,0, pbBuffer, lpdwCount, dwBufferLen);}// 解密数据BOOL DecryptData(PBYTE pbBuffer, LPDWORD lpdwCount, BOOL bFinal=FALSE){if (m_hKey == NULL || pbBuffer == NULL || lpdwCount == NULL){return FALSE;}//-----------------------------------------------------------// Decrypt the block of data. if(!CryptDecrypt(m_hKey, 0, bFinal, 0, pbBuffer, lpdwCount)){return FALSE;}return TRUE;}int _tmain(int argc, _TCHAR* argv[]){int a = 1222;//-----------------------------------------------------------// 加密 数据 if (!CreateCryptSession(TEXT("c10509"))){cout << "CreateCryptSession Failed.. " << endl;return FALSE;}DWORD dwCount = sizeof(int);if (!EncryptData((PBYTE)&a, sizeof(int), &dwCount)){cout << "Encrypt Data Failed... " << endl;return FALSE;}else{cout << "Encrypt Data Successed... " << endl;}DestroyCryptSession();  // 注意这句的调用与前面 CreateCryptSession 成对//-----------------------------------------------------------{// =======================================================// ====        解密部分  =============if (CreateCryptSession(TEXT("c10509")) == FALSE){return FALSE;}// 解密//DWORD dwDecryptCount = sizeof(decryptText);if (DecryptData((PBYTE)&a, &dwCount)){cout << "Decrypt Data Successed..." << endl;}else{cout << "DeCrypt Data Failed... " << endl;}DestroyCryptSession(); // =======================================================}return 0;}


可以参考的链接: http://blog.csdn.net/cnbragon/article/details/715058

MSDN:                        http://msdn.microsoft.com/zh-cn/aa382044



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 王者荣耀太卡了怎么办 想卖王者号qq怎么办 小米4电视发热严重怎么办 三星玩王者荣耀卡怎么办 华为麦芒5网络差怎么办 华为麦芒无线信号不好怎么办 华为麦芒6网络不好怎么办 华为麦芒6信号差怎么办 华为手机无线网信号差怎么办 华为麦芒6数据信号差怎么办 华为麦芒54g信号差怎么办 华为手机wifi信号差怎么办 华为手机导航信号弱怎么办 华为手机gps信号弱怎么办 麦芒5指纹消失了怎么办 华为应用锁密码忘了怎么办 华为麦芒5密码忘了怎么办 华为卡1无服务怎么办 经常卡1无服务怎么办 华为手机进水无服务怎么办 苹果手机进水后无服务怎么办 苹果6进水无服务怎么办 华为手机突然无服务怎么办 sim卡显示无服务怎么办 华为麦芒进水无限开关机怎么办 华为麦芒5进水黑屏怎么办 华为麦芒6进水了怎么办 4g手机开不开机怎么办 全屏钢化膜总是翘边怎么办 华为麦芒屏幕触屏失灵怎么办 华为麦芒5运行慢怎么办 手机屏保密码忘记了怎么办 麦芒5密码锁忘了怎么办 超薄手机壳松了怎么办 华为麦芒5声音小怎么办 笔记本外壳a面裂了怎么办 苹果手机外壳摔坏了怎么办 挂衣服肩膀出包怎么办 摩拜单车手机号注销了怎么办 摩拜单车手机号码换了怎么办 摩拜单车换手机号码打不开怎么办