资源简介
用C++编写的调用CryptAPI库函数实现DH交换协议的演示程序,供学习参考
代码片段和文件信息
#pragma comment(lib“Crypt32.lib“)
#include
#include
#include
#include “eboy_wincrypt.h“
//#include
//#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
//#define KEYLENGTH 0x00800000
//#define ENCRYPT_ALGORITHM CALG_RC2
//#define ENCRYPT_BLOCK_SIZE 8
#define DHKEYSIZE 512
void HandleError(char *s);
static const BYTE g_rgbPrime[] =
{
0x91 0x02 0xc8 0x31 0xee 0x36 0x07 0xec
0xc2 0x24 0x37 0xf8 0xfb 0x3d 0x69 0x49
0xac 0x7a 0xab 0x32 0xac 0xad 0xe9 0xc2
0xaf 0x0e 0x21 0xb7 0xc5 0x2f 0x76 0xd0
0xe5 0x82 0x78 0x0d 0x4f 0x32 0xb8 0xcb
0xf7 0x0c 0x8d 0xfb 0x3a 0xd8 0xc0 0xea
0xcb 0x69 0x68 0xb0 0x9b 0x75 0x25 0x3d
0xaa 0x76 0x22 0x49 0x94 0xa4 0xf2 0x8d
};
// Generator in little-endian format.
static BYTE g_rgbGenerator[] =
{
0x02 0x88 0xd7 0xe6 0x53 0xaf 0x72 0xc5
0x8c 0x08 0x4b 0x46 0x6f 0x9f 0x2e 0xc4
0x9c 0x5c 0x92 0x21 0x95 0xb7 0xe5 0x58
0xbf 0xba 0x24 0xfa 0xe5 0x9d 0xcb 0x71
0x2e 0x2c 0xce 0x99 0xf3 0x10 0xff 0x3b
0xcb 0xef 0x6c 0x95 0x22 0x55 0x9d 0x29
0x00 0xb5 0x4c 0x5b 0xa5 0x63 0x31 0x41
0x13 0x0a 0xea 0x39 0x78 0x02 0x6d 0x62
};
//基于DH密钥交换协议的例子
void DH()
{
// PCHAR szSource;
// PCHAR szDestination;
// PCHAR szPassword;
// char response;
BOOL fReturn;
HCRYPTPROV hCryptProv1 ; //密钥1的CSP
HCRYPTPROV hCryptProv2 ; //密钥2的CSP
HCRYPTKEY hPrivateKey1 = NULL;
HCRYPTKEY hPrivateKey2 = NULL;
HCRYPTKEY hSessionKey1 = NULL;
HCRYPTKEY hSessionKey2 = NULL;
DWORD dwDataLen1;
DWORD dwDataLen2;
DATA_BLOB P;
DATA_BLOB G;
PBYTE pbKeyBlob1 = NULL;
PBYTE pbKeyBlob2 = NULL;
ALG_ID Algid = CALG_DES;
BYTE *pbData;
int i = 0;
P.cbData = DHKEYSIZE/8;
P.pbData = (BYTE*)(g_rgbPrime);
G.cbData = DHKEYSIZE/8;
G.pbData = (BYTE*)(g_rgbGenerator);
BYTE g_rgbData[1000] = “Hello World“;//要加密的数据 会碰到缓冲区不足问题
DWORD dwLength = sizeof(g_rgbData);
printf(“连接CSP1(DH)...\n“);
if(CryptAcquireContext(
&hCryptProv1
NULL
MS_ENH_DSS_DH_PROV//MS_ENHANCED_PROV
PROV_DSS_DH //PROV_RSA_FULL
CRYPT_VERIFYCONTEXT)) //0
{
printf(“打开CSP1成功 \n“);
}
else
{
HandleError(“调用 CryptAcquireContext 出错!“);
}
printf(“生成密钥对1...\n“);
if(CryptGenKey(
hCryptProv1
CALG_DH_EPHEM
DHKEYSIZE << 16 | CRYPT_EXPORTABLE | CRYPT_PREGEN
&hPrivateKey1))
{
printf(“创建会话密钥1成功. \n“);
}
else
{
HandleError(“调用 CryptGenKey 出错!“);
}
// Set the prime for party 1‘s private key.
fReturn = CryptSetKeyParam(
hPrivateKey1
KP_P
(PBYTE)&P
0);
if(!fReturn)
{
goto ErrorExit;
}
// Set the generator for party 1‘s private key.
fReturn = CryptSetKeyParam(
hPrivateK
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-03-19 02:08 dh\
目录 0 2012-04-05 21:40 dh\Debug\
文件 155715 2012-03-19 02:07 dh\Debug\dh.exe
文件 193996 2012-03-19 02:07 dh\Debug\dh.ilk
文件 3561764 2012-03-19 00:11 dh\Debug\dh.pch
文件 418816 2012-03-19 02:07 dh\Debug\dh.pdb
文件 25506 2012-03-19 02:07 dh\Debug\dh_alice.obj
文件 9 2012-04-05 21:40 dh\Debug\run.bat
文件 164864 2012-03-19 02:07 dh\Debug\vc60.idb
文件 77824 2012-03-19 02:07 dh\Debug\vc60.pdb
文件 4236 2012-03-18 18:30 dh\dh.dsp
文件 529 2012-03-18 18:09 dh\dh.dsw
文件 66560 2012-03-19 02:08 dh\dh.ncb
文件 54784 2012-03-19 02:08 dh\dh.opt
文件 1389 2012-03-19 02:07 dh\dh.plg
文件 8871 2012-03-19 02:08 dh\dh_alice.cpp
文件 656247 2012-03-18 23:27 dh\eboy_wincrypt.h
目录 0 2012-03-19 00:04 dh\lib\
文件 264106 1999-02-13 11:03 dh\lib\Crypt32.Lib
- 上一篇:Effective Modern C++.mobi
- 下一篇:C++程序设计_打飞碟
相关资源
- C++程序设计_打飞碟
- Effective Modern C++.mobi
- libstdc++-6.dll
- Visual C++ 6.0数据库系统开发导航
- VC++MFC学生管理系统
- 编译原理 课程设计 DAG 报告+源码C++版
- 一个超完整的医药管理系统C++医药管
- 网络爬虫 C++ Crawler Spider
- 基于c++的图书管理系统
- C++编写植物大战僵尸 源代码
- Virtual Machine Design and Implementation in C
- 简单易懂C++ WebServer接口开发源代码
- P2P聊天软件的C++实现包括语音功能
- 用c++做数据曲线和函数曲线
- c++太空射击代码Opengl
- C++写的报文转发的网关程序
- 傅里叶变换研究|C++源码|带通滤波器
- MFC局域网聊天室C++
- k-means的C++代码vs
- 进程管理模拟 VC++ mfc实现
- 销售管理系统C++
- 列车时刻表查询系统c++ sql
- Visual_C++_开发的即时通讯系统
- 82道华为校招历年机试编程题C++代码附
- 画图模仿画图白板小程序源代码(V
- 经典小游戏大集合(C++ 源码)
- AES加密/解密C++源代码
- 分别用c语言和c++mfc实现正态分布曲线
- Programming_With_Microsoft_Visual_C++_.Net
- 语音识别端点检测程序C++
评论
共有 条评论