小李美刀

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

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 阅读(11) 评论(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 阅读(15) 评论(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 阅读(16) 评论(0) 编辑

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

posted @ 2012-01-12 16:28 Ady Lee 阅读(13) 评论(0) 编辑

2011年6月2日

摘要: 我们先定义目标: 1. simple_bind 提供与 bind 类似的界面,可以只考虑通过对象引用(或者值)调用成员函数的情况,而不考虑 free function 或者通过指针调用等等。具体地说,就是允许 person.SetName("Ralph") --> simple_bind(&Person::SetName, person, _1)(string("Ralph")) simple_bind(&Person::SetName, _1, string(“Ralph"))(person) simple_bind(&阅读全文

posted @ 2011-06-02 11:39 Ady Lee 阅读(27) 评论(0) 编辑

摘要: Boost.bind 好用么?当然好用,而且它也确定进入下一代的 C++ 标准了,也早就进了 TR1 了。回顾一下,它允许我们干这个:#include <algorithm>#include <iostream>#include <string>#include <vector>#include <boost/bind.hpp>using namespace std;using namespace boost;struct Person{ Person(const string& name) : name_(name) {} 阅读全文

posted @ 2011-06-02 10:54 Ady Lee 阅读(47) 评论(0) 编辑

2011年6月1日

摘要: bind - boost 头文件: boost/bind.hpp bind 是一组重载的函数模板.用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象. 它的源文件太长了. 看不下去. 这里只记下它的用法: 9.1 对于普通函数 假如有函数 fun() 如下: void fun(int x, int y) {cout << x << ", " << y << endl;}现在我们看看怎么用bind 向其绑定参数. 对于像 fun 这样的普通函数. 若fun 有n个参数. 则 bind 需要 n+1 个参数阅读全文

posted @ 2011-06-01 16:35 Ady Lee 阅读(54) 评论(0) 编辑

2011年5月31日

摘要: 环境: VS2010,boost_1_46_1,解压缩后放在,D:\boost_1_46_1。1,编译。boost库大部分源文件是只有投文件,所以有很多库不用编译就可以使用。但是有些库是需要编译源码的。asio就需要编译。怎么去编译呢?在boost官方网站下载bjam.exe,放入boost源文件的根目录下面。因为asio依赖于其它的一些库,所以编译参数还有点复杂。然后在cmd下输入D:\boost_1_46_1>bjam --with-system --with-thread --with-date_time --with-regex --with-serialization stag阅读全文

posted @ 2011-05-31 15:26 Ady Lee 阅读(110) 评论(0) 编辑

2011年5月25日

摘要: http://www.51ielts.com 2005-1-22 来源: 【无忧雅思网】Michael Needjobs3221 Need Job StreetNorth York, ONV5R 5B7Tel.(416) 123-4567--------------------------------------------------------------------------------OBJECTIVE: Seeking a challenging position as System Analyst with a growth-oriented organisation wher.阅读全文

posted @ 2011-05-25 13:43 Ady Lee 阅读(73) 评论(0) 编辑

2011年2月22日

摘要: 常在江湖飘,少不了要和DLL打交道。有时我们需要使用C++Builder编写一个DLL,然后拿到VC中用(比如用C++Builder写一个窗体封装到DLL);有时又要拿VC编写的DLL在C++Builder使用(比如拿到一个产品的开发包,这个包是一堆用VC写的DLL)。很遗憾,由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互通用,因此给实际带来了很多的麻烦。下面来说一说如何解决这个问题。一、VC生成DLL,C++Builder调用。1、用extern "C"修饰VC导出的DLL函数。如:extern "C&quo阅读全文

posted @ 2011-02-22 17:48 Ady Lee 阅读(173) 评论(0) 编辑