`
yujiawei
  • 浏览: 60171 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习CRYPTO第二天

阅读更多
因为是.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结构数组
分享到:
评论

相关推荐

    学习cryptoapi的笔记

    这里介绍一些CryptoAPI的知识,也是让自己对CryptoAPI做一个系统的总结(针对证书操作这块)。 微软加密服务体系 微软加密服务体系CryptoAPI的结构如下图所示,微软加密服务体系包含三层结构和两个接口,分别为应用...

    javax.crypto crypto.jar

    javax.crypto.Cipher; javax.crypto.KeyGenerator; javax.crypto.spec.SecretKeySpec等

    crypto 库__crypto 库

    crypto 库 golang.org/x/crypto 库文件crypto 库 golang.org/x/crypto 库文件crypto 库 golang.org/x/crypto 库文件

    信息安全TS-Crypto.Code学习资料

    信息安全TS-Crypto.Code学习资料:测试题目;入门指导;学习资料。

    crypto++学习笔记

    crypto++学习笔记 主要讲解了一些密码算法在 c++中的实现

    Crypto安装步骤Crypto安装步骤

    Crypto安装步骤,自己安装成功后总结的,方便自己下次使用;Crypto安装步骤,自己安装成功后总结的,方便自己下次使用。

    crypto_CRYPTO_PowerBuilder_

    Crypto Using PowerBuilder 12

    crypto-js npm包

    crypto-js npm安装包,用于AES加密的crypto-js 的npm包

    crypto-js4.1.1版本,js在crypto-js文件夹里面

    crypto-js4.1.1版本,js在crypto-js文件夹里面

    commons-crypto-1.0.0-API文档-中文版.zip

    赠送jar包:commons-crypto-1.0.0.jar; 赠送原API文档:commons-crypto-1.0.0-javadoc.jar; 赠送源代码:commons-crypto-1.0.0-sources.jar; 赠送Maven依赖信息文件:commons-crypto-1.0.0.pom; 包含翻译后的API...

    javax-crypto.jar

    javax-crypto.jar 用了就知道

    crypto-js文件下载

    crypto-js文件下载

    crypto++源码

    cryptopp 也叫crypto++的源代码。第N次对众多技术网站无法打开的状态表示不满。

    CryptoAPI培训教程

    CryptoAPI培训教程,包含了所有CryptoAPI函数介绍、CryptoAPI编程实例等等。

    CTF加密解密-CRYPTO-crypto13 的题目

    CTF加密解密—CRYPTO—crypto13 CTF加密解密—CRYPTO—crypto13 CTF加密解密—CRYPTO—crypto13 CTF加密解密—CRYPTO—crypto13 CTF加密解密—CRYPTO—crypto13 CTF加密解密—CRYPTO—crypto13 CTF加密解密—CRYPTO...

    libagora-crypto.so

    面向开发者的libagora-crypto.so文件,方便各位下载使用libagora-crypto.so

    IIS Crypto加密工具

    IIS Crypto是一个免费工具,使管理员能够在Windows Server 2008,2012和2016上启用或禁用协议,密码,哈希和密钥交换算法。它还允许您重新排序IIS提供的SSL / TLS密码套件,实施最佳实践只需单击一下,即可创建自定义...

    crypto-js-4.0.0.tar.gz

    crypto.js 资源文件

    CryptoApi封装库

    根据相关资料和示例,总结的基于微软CryptoApi封装的库。包含创建根证书、用户证书、安装根证书、创建私钥公钥、微缩图算法、证书保存到文件、导入证书库、显示证书信息,创建证书请求、查找证书...... 压缩中,还...

    crypto_cryptoapi.rar_CRYPTO_Crypto++_cryptoAPI

    Crypto wrapper for Microsoft CryptoAPI.

Global site tag (gtag.js) - Google Analytics