学习CRYPTO第二天

原创 2005年04月28日 20:44:00

因为是.net安全,所以必须在VC7上运行下面面的一些例子(今天害得我在VC6上运行,错误一大堆),上面介绍了CRYPTAPI的一些基础,下面我就不按照MSDN的往下看了,下面的几个专题是Hashing,Signing Data,Creating and Receiving Enveloped Data Messages以及Encrypting and Decrypting.这些专题等需要用到的时候再具体看吧。主要专注于证书的操作。不过cryptui.dll又要求是在windows 2003 Server版本才可以,哎,只好等晚上再去买盘了。
 

   1,解码CERT_INFO结构
   给定一个证书,第一步是调用函数CertCreateCertificateContext解码证书BLOB。当这个函数被调用,那么产生一个编码证书的复制品,创建一个CERT_CONETXT类型的结构和一个CERT_INFO类型的结构。一个certificate_context包含一个原始证书BLOB,一个CERT_CONETXT类型的结构以及一个CERT_INFO类型的结构。下面我们具体看看CERT_CONETXT以及CERT_INFO的结构(wincrypt.h):
typedef struct _CERT_CONTEXT {
    DWORD         dwCertEncodingType;
    BYTE          *pbCertEncoded;
    DWORD         cbCertEncoded;
    PCERT_INFO    pCertInfo;
    HCERTSTORE    hCertStore;
} CERT_CONTEXT, *PCERT_CONTEXT;
typedef const CERT_CONTEXT *PCCERT_CONTEXT;
typedef struct _CERT_INFO {
    DWORD                       dwVersion;
    CRYPT_INTEGER_BLOB          SerialNumber;
    CRYPT_ALGORITHM_IDENTIFIER  SignatureAlgorithm;
    CERT_NAME_BLOB              Issuer;
    FILETIME                    NotBefore;
    FILETIME                    NotAfter;
    CERT_NAME_BLOB              Subject;
    CERT_PUBLIC_KEY_INFO        SubjectPublicKeyInfo;
    CRYPT_BIT_BLOB              IssuerUniqueId;
    CRYPT_BIT_BLOB              SubjectUniqueId;
    DWORD                       cExtension;
    PCERT_EXTENSION             rgExtension;
} CERT_INFO, *PCERT_INFO;
typedef struct _CERT_EXTENSIONS {
    DWORD           cExtension;
    PCERT_EXTENSION rgExtension;
} CERT_EXTENSIONS, *PCERT_EXTENSIONS;
由上面的三个结构可以明显的看出证书的存储过程。(具体参数意思可以由参数名看出来)
   2,编码一个CERT_INFO结构
   编码过程和解码过程是相反的,下面事例如何增加签发者到CERT_INFO结构中。
   1,创建一个包含签发者名字的字符串。
   2,创建一个CERT_RDN_ATTR结构的数组,它初始化后能够包含刚刚创建的字符串。
   3,创建一个CERT_RDN结构的数组,它包含刚刚初始化的CERT_RDN_ATTR结构的数组
   4,创建一个CERT_NAME_INFO结构指向刚刚创建的CERT_RDN结构的数组的指针
   5,调用CryptEncodeObject函数来获取输出编码后BLOB的长度。
   6,为BLOB分配内存空间
   7,再次调用CryptEncodeObject函数,将有关编码信息写入
   8,设置CERT_INFO结构中的Issuer.cbData为第5步得到的长度,设置Issuer.pbData为第6步得到的地址,那么现在签发者就存在于CERT_INFO结构中了。
   添加一个编码后的扩展信息到CERT_INFO结构中
   1,初始化一个扩展信息结构。
   2,调用CryptEncodeObject,来获取所需空间大小。
   3,分配空间
   4,再次调用CryptEncodeObject来获取编码后的信息。
   5,创建一个CERT_EXTENSION结构数组
   6,初始化CERT_EXTENSION,并且在CERT_EXTENSION中添加刚刚编码后的信息。
   7,初始化CERT_INFO结构的rgExtension,并且把他指向CERT_EXTENSION结构数组

学习CRYPTO第二天

因为是.net安全,所以必须在VC7上运行下面面的一些例子(今天害得我在VC6上运行,错误一大堆),上面介绍了CRYPTAPI的一些基础,下面我就不按照MSDN的往下看了,下面的几个专题是Hashin...
  • wdt3385
  • wdt3385
  • 2012年07月19日 17:10
  • 482

hibernate学习笔记第二天的源码

  • 2017年03月21日 12:26
  • 7.81MB
  • 下载

spring 学习第二天

  • 2009年11月26日 18:04
  • 2KB
  • 下载

Crypto++学习总结--算法介绍

Crypto++  算法介绍         Crypto++是开源的C++数据加密算法库,支持如下算法:RSA、MD5、DES、AES、SHA-256等等。对于加密有对称加密和非对称加密。   对...

NODE.JS学习笔记——CRYPTO 加密模块

使用require('crypto')调用加密模块。 加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。 该模块...

Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后对一些数据进行一些加密解密的操作。 笔者之前没接触过任...

Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

http://www.cppblog.com/ArthasLee/archive/2012/07/07/135186.html 背景(只是个人感想,技术上不对后面的内容构成知识性障碍...

Crypto++学习总结--算法介绍

Crypto++ 算法介绍        Crypto++是开源的C++数据加密算法库,支持如下算法:RSA、MD5、DES、AES、SHA-256等等。对于加密有对称加密和非对称加密。   ...
  • zhu2695
  • zhu2695
  • 2016年04月30日 11:43
  • 741

FFMPEG学习【libavutil】:Crypto and Hashing(四)

一、TWOFISH 一)、函数 struct AVTWOFISH *  av_twofish_alloc (void) 分配AVTWOFISH上下文要释放结...

学习CRYPTO第三天

1,CertOpenSystemStore打开系统最常用的证书存储区域。假如需要满足复杂的需要,请看CertOpenStore HCERTSTORE WINAPI CertOpenSystemSto...
  • wdt3385
  • wdt3385
  • 2012年07月19日 17:11
  • 497
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习CRYPTO第二天
举报原因:
原因补充:

(最多只允许输入30个字)