您的位置:首页 >> 编程开发 >> Visual C++ >> 高级用户界面 >> 正文
RSS
 

如何用加密API获得纯文本的会话密钥

http://www.rdxx.com 01年09月27日 09:46 互联网 我要投稿

关键词: 文本 , 密钥 , 加密 , 会话 , API
 

如何:        用加密API获得纯文本的会话密钥


运行环境: VC6 SP5, 2000 SP1,NT4 SP3

在通常的编程中获得会话密钥匙非常重要的。然而,微软的加密操作API(无论是基础的还是增强的)都不能提供这项功能。CryptExportKey() CryptImportKey() 各自要求一个有效的密钥句柄来对会话密钥进行加密和解密。MSDN 展示了一种使用私钥的方法。但是微软的这个在MSDN中例子相当的长。下面的这个方法不仅更快而且更有效。

在运行这个例子前,需要在Project -> Settings (Visual Studio 6.0 ) 中对以下参数进行设置:

1.添加C++预处理定义:

   _WIN32_WINNT=0x0500, _CRYPT32_(WIN2K)

 或者 _WIN32_WINNT=0x0400, _CRYPT32_(NT4)

2. 加入库连接

{0>  crypt32.lib <}0{>?  crypt32.lib

 

例子代码如下:?<0}

#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>
 
#define KEY_PAIR_SIZE     dwSize - 12
#define SESSION_KEY_SIZE  dwKeyMaterial
 
void main()
{
  
   HCRYPTPROV hProv = 0;
   HCRYPTKEY hExchangeKeyPair = 0;
   HCRYPTKEY hSessionKey = 0;
   BYTE *pbKeyMaterial  = NULL;
   DWORD dwKeyMaterial ;   
   BYTE *pbExportedKeyBlob = NULL;
   BYTE *pbEncryptedKey    = NULL;
   DWORD dwSize;
   unsigned int c;
      
   __try
   {
                 
    if (!CryptAcquireContext( &hProv, 
                              "Container Name", 
                              MS_ENHANCED_PROV , 
                              PROV_RSA_FULL, 
                              CRYPT_MACHINE_KEYSET ))
    {
      __leave;
    }
  
    //---------------------------------------------------
//创建一个会话密钥。在这个例子中我们将使用一个168位的3DES key
 
    if (!CryptGenKey( hProv, CALG_3DES, 
                      CRYPT_EXPORTABLE, &hSessionKey ))
    {
      __leave;
    }
 
    //---------------------------------------------------
//得到交换密钥对的句柄
                               
共3页  第1页 第2页 第3页

 
 
标签: 文本 , 密钥 , 加密 , 会话 , API 打印本文
 
 
  相关资讯
RSS
 
无相关新闻
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站