摘要:在公开密码算法的前提下,数据的安全取决于密钥。因此,密钥的产生、销毁、交换(分发)是数据保密工作中的重要部分。CryptoAPI密钥产生和交换函数主要有生成密钥函数CryptGenKey、派生密钥函数CryptDeriveKey、销毁密钥函数CryptDestroyKey、复制密钥函数CryptDuplicateKey、导出密钥函数CryptExportKey、导入密钥函数CryptImportKey、获得密钥参数函数CryptGetKeyParam、设置密钥参数函数CryptSetKeyParam、产生随机函数CryptGenRandom、一、生成函数CryptGenKey:功能:产生一个随
阅读全文
摘要:CryptoAPI的密码服务提供者函数主要有6个函数:1)连接或断开CSP函数CryptAcquireContext、CryptReleaseContext;2)枚举CSP函数CryptEnumProviders;3)获得或设置默认CSP函数CryptGetDefaultProvider、CryptSetProvider;4)获取或设置CSP参数函数CryptGetProvParam、CryptSetProvParam;一、连接CSP函数CryptAcquireContext:功能:连接CSP,获得指定CSP的密钥容器的句柄;原型:BOOL WINAPI CryptAcquireContext
阅读全文
摘要:CryptoAPI是微软提供的一组加密函数,其功能是为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。CryptoAPI处于应用程序和密码服务提供者CSP之间。CryptoAPI的编程模型和Windows系统的图形设备接口GDI类似,其中的CSP相当于图形设备驱动程序,加密硬件等同于图形硬件。每个CSP都是一个独立的模块,可以执行所有的密码操作。CSP负责创建和销毁密钥并提供各种密码操作,每个CSP提供不同的CryptoAPI实现,并通过CSP名称来区别。CSP可以由软件实现,也可以由硬件实现,比如常见的USBKEY等。CSP是Windows安全应用的基础,在Wi
阅读全文
摘要:1)SCardListReaders函数用来获取系统中在指定读卡器组集合中的读卡器名字列表(去掉重复的)。调用者提供一读卡器组列表,函数返回这些指定组里面的读卡器名字列表;无法标识的组名将被忽略。LONG WINAPI SCardListReaders( __in SCARDCONTEXT hContext, //由SCardEstablishContext()建立的资源管理器上下文,//不能为NULL __in_opt LPCTSTR mszGroups, //读卡器组名,为NULL时表示列出系统中所有读卡器 __out LPTSTR mszReaders, //系统中指定读卡器组中的读卡器
阅读全文
摘要:Windows系统提供了大量的API来方便的进行智能卡应用程序的开发,通过它们我们可以直接控制智能卡读卡器对智能卡进行操作,也可以与智能卡建立直接的虚拟连接而不用考虑智能卡读卡器。智能卡应用程序开发的一般流程是:1)建立连接(使用函数SCardEstablishContext和SCardConnect,SCardReconnect);2)开始事务处理(使用函数SCardBeginTransaction);3)进行事务处理(使用函数SCardTransmit);4)结束事务处理(使用函数SCardEndTransaction);5)断开连接(使用函数SCardDisconnect和SCardRe
阅读全文
摘要:使用Crypto++的MD5算法对字符串进行哈希,先在VS2010中新建Win32 Console Application,取工程名为:Crypto-MD5。在工程主目录中新建文件夹include,将Crpyto++的头文件放进去,在同一目录新建lib文件夹,在lib文件夹中再建两个文件夹Debug和Release,之后将Crypto++的调试版和发布版cryptlib.lib分别放到前面两个文件夹中。打开工程Crypto-MD5.cpp文件,修改添加代码如下:==========================Crypto-MD5.cpp====================#includ
阅读全文
摘要:eccrypto.h提供了基于椭圆曲线加密操作的一系列模板类,将这些类设计成模板主要的原因是有两种类型椭圆曲线。因此,类EC2N(ec2n.h)代表的是基于GF(2n)的椭圆曲线算法;而类ECP(ecp.h)代表的是基于GF(p)的椭圆曲线算法。椭圆曲线的参数保存在模板类ECParameters中,参数能够以多种方式初始化;但是其中一个更实用的用法是使用函数LoadRecommendedParameters(),它提供了建议参数之一,定义在oids.h中。下面看几个实例代码:1)生成一个EC2N密钥对,并保存之:// ECPrivateKey is used directly only bec
阅读全文
摘要:Base64Encoder是一个接收任何数据输入并将之转换成base64编码的过滤器,并可选地在每行满72个字符时进行换行。在现行版本的Crypto++中,类Base64Encoder对象在销毁时并没有执行对缓冲区中的数据进行编码。因此,除了在一个包含Base64Encoder过滤器的过滤器对象链中,当Base64Encoder之前没有其他过滤器时,函数MessageEnd()会被自动调用外,我们必须在数据输入结束时显式地调用函数MessageEnd()。(注意:MessageEnd()的nPropagation参数能被使用的情况是:当和Base64Encoder关联的其他过滤器对象不需要me
阅读全文
摘要:Crypto++用户手册のrsa.h:与RSA加解密相关的类都是在rsa.h头文件中定义的。其中类RSAFunction和类InvertibleRSAFunction是分别封装了RSA公钥和私钥信息的基础类,这两个类支持直接通过函数ApplyFunction (公钥操作)和函数CalculateInverse(私钥操作)进行RSA的计算。我们只有在完全清楚自己的操作的情况下,同时使用正确补位(padding),才能直接使用这两个函数。一般情况下,我们更多使用的是rsa.h中通过typedef定义的类型:typedef RSAES<OAEP<SHA> >::Decrypt
阅读全文