网站大量收购独家精品文档,联系QQ:2885784924

CSP学习笔记.doc

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CSP学习笔记

Crypto?API?学习笔记一 微软公司在NT4.0以上版本中提供了一套完整的Crypto?API的函数,支持密钥交换,数据加密解密,数字签名,给程序员带来了很大方便,用户在对软件进行保护的时候可以直接利用Crypto?API来完成这些工作,比如计算注册码,检查程序的完整性等。 ??我们在用这些的API进行加密解密的时候,只需要知道如何去应用它们,而不必知道它们的底层实现。如果想知道它们更为详尽的资料,可以查找相关的资料。 ??对Crypto?API只是业余型的感兴趣,想通过写学习笔记,一是让自己记的更牢固些,二是想把自己的学的跟大家探讨一下。写的不好,大家多多原谅。我主要通过MSDN来学习,例子也是完全取自MSDN。 ??首先,是Crypto?API运行的环境。 首先需要Crypt32.lib,将它加到project-setting-link下面,当然你也可以在程序中用#pragma?comment?(lib,?crypt32.lib)加入。 ??在程序开头,你要加入两个头文件?windows.h?和?Wincrypt.h,和一个#define?MY_ENCODING_TYPE??(PKCS_7_ASN_ENCODING?|?X509_ASN_ENCODING) ??在正式应用API进行一系列的加密解密的时候,需要有一些准备工作,下面是介绍一些在正式开始时所需要了解和做的工作。 生成密钥和密钥容器 ??我们知道,在进行加密解密的时候,我们需要一个密钥进行加密,和一个密钥进行解密,加密密钥和解密密钥可能相同,也可能不同。于是在我们进行加密解密的开始时,我们首先需要有密钥。下面这个程序,完成了三个任务,并且介绍了一些函数的用法。 任务一:获取一个指定的密钥容器,如果这个容器不存在,创建一个。 任务二:如果容器中不存在一个签名密钥对,创建一个 任务三:如果容器中不存在一个交换密钥对,创建一个 ??//------------------------------------------------------------------- 下面这段程序使用到了这几个函数 CryptAcquireContext? CryptDestroyKey? CryptGenKey? CryptGetUserKey? //?Copyright?(c)?Microsoft?Corporation.??All?rights?reserved. #include?stdio.h #include?tchar.h #include?windows.h #include?Wincrypt.h //------------------------------------------------------------------- void?MyHandleError(LPTSTR?psz) { ????_ftprintf(stderr,?TEXT(An?error?occurred?in?the?program.?\n)); ????_ftprintf(stderr,?TEXT(%s\n),?psz); ????_ftprintf(stderr,?TEXT(Error?number?%x.\n),?GetLastError()); ????_ftprintf(stderr,?TEXT(Program?terminating.?\n)); ????exit(1); }?//?End?of?MyHandleError. 上面这个函数是一个异常处理函数,当出现错误的时候,出现提示,并推出程序。以后的程序中都有这个函数,以后就会将这个函数的实现省去。现在这个函数的实现在后面。 void?main(void)? {? ????????HCRYPTPROV?hCryptProv;???//定义一个CSP模块的句柄。“CSP模块,请查看《加密解密二》222页,那里有简单的说明,这里就不说了。????? ???? ????????LPCTSTR?pszContainerName?=?TEXT(My?Sample?Key?Container);//用一个TEXT宏定义一个容器的名字, ???? ????if(CryptAcquireContext(????????//这个函数是获取有某个容器的CSP模块的指针,成功返回TRUE。 ????????hCryptProv,????????????//指向一个CSP模块句柄指针,里面用指定的容器 ????????pszContainerName,???????//指定容器的名称 ?????NULL,????????????????//这个参数这里用的是缺省值,指得是缺省得CSP模块,你也可以传入一个LPCTSTR类型的字符

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档