IT点滴

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

2012年1月12日

摘要: 在使用CyptoAPI对口令进行加密编程前,必须预先建立密钥容器和密钥。若未对此进行预处理,由于在后续编程中需要在调用CyptEncrpt()进行数据加密之前首先获取到当前机器缺省的密钥容器。这十用于连接默认CSP并获取默认密钥容器的函数CryptAcquireContext()的调用就会出错。因此必须在进行加密运算之前确保机器已经建立了默认的密钥容器。下面的Initia()函数将在程序初始化时被调用用以建立密钥容器和密钥: Void CWorkTimeApp::Initial() { HCRYPTPROV hProv; HCRYPTKEY hKey; Unsigned char ... 阅读全文

posted @ 2012-01-12 16:38 Ady Lee 阅读(624) 评论(0) 推荐(0)

摘要: 5. 完整代码 #include "stdafx.h"#include <windows.h>#include <WinCrypt.h>#include <stdio.h> // Global Csp HandleHCRYPTPROV hCryptProv = NULL; // Handle for a cryptographic void ToSmartCard(HCERTSTORE hSystemStore){PCCERT_CONTEXT pCertContext = NULL; char pszNameString[256]; DW 阅读全文

posted @ 2012-01-12 16:32 Ady Lee 阅读(1022) 评论(0) 推荐(0)

摘要: 1. 通过Csp读取证书使用的函数 CryptGetUserKey 获取公私钥对的句柄 注意AT_SIGNATURE,AT_KEYEXCHANGE的不同,前者签名,后者加密。 CryptGetKeyParam 读取和公私钥对相关联的证书 注意使用KP_CERTIFICATE 2. 指定Csp容器 通常获取证书时,usbkey已经发证完毕。这是比较难以判断容器的名称。通常会选择默认容器,但有些RA发证时比较特别,可能会使用两个容器。签名证书使用默认容器,而加密证书使用指定的某个容器。 为了验证上面所说的情况,需要枚举Usbkey上的容器进行选择查看。 CryptGetProv... 阅读全文

posted @ 2012-01-12 16:30 Ady Lee 阅读(1739) 评论(0) 推荐(0)

摘要: 其实CSP主要是对容器里的密钥对操作的,和证书关系不大。容器里的密钥对有两种类型:一种是AT_KEYEXCHANGE,表示加密的密钥对,一种是AT_SIGNATURE表示签名的密钥对。由于美国的出口限制,在MS的CSP中加密的密钥对可以取的密钥最大长度通常会比签名的密钥对短。通常加密的密钥对只会用于加密,签名的密钥对只会用于签名,由于某些原因(例如产生证书请求),加密的密钥对也可以用于签名。我把AT_KEYEXCHANGE和AT_SIGNATURE看作是容器里的两个位置。在智能卡CSP中可以把证书写入容器中,和加密的密钥对对应的证书写到AT_KEYEXCHANGE位置中,和签名的密钥对对应的证 阅读全文

posted @ 2012-01-12 16:28 Ady Lee 阅读(547) 评论(0) 推荐(0)