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

学习CRYPTO第三天

阅读更多
1,CertOpenSystemStore打开系统最常用的证书存储区域。假如需要满足复杂的需要,请看CertOpenStore
HCERTSTORE WINAPI CertOpenSystemStore(
HCRYPTPROV hprov, //CSP句柄,NULL为默认句柄,或者由CryptAcquireContext返回
LPTCSTR szSubsystemProtocol //打开的系统存储区的名字。假如名字不为CA,MY,ROOT,SPC则新建一个证书存储区域,可以使用CertEnumSystemStore列出所有的已存在的系统存储区
);
2,CertOpenStore使用一个指定的存储区提供类型来打开一个证书存储区。
HCERTSTORE WINAPI CertOpenStore(
LPCSTR lpszStoreProvider, //指定提供的存储的类型,大量类型,请参见MSDN
DWORD dwMsgAndCertEncodingType, //只有当上一参数为CERT_STORE_PROV_MSG, CERT_STORE_PROV_PKCS7, or CERT_STORE_PROV_FILENAME才使用,否则必须为0
HCRYPTPROV hCryptProv, //密码算法提供方的句柄,推荐使用默认,将参数置为NULL
DWORD dwFlags, //它由高字节和低字节组成,参数众多。
const void* pvPara //void类型,可以指向任意类型数据。
);
例如:if(hSysStore = CertOpenStore(CERT_STORE_PROV_SYSTEM,0,NULL,CERT_SYSTEM_STORE_CURRENT_USER,L"MY") 打开系统的MY存储区3,CertCloseStore关闭打开的证书存储区句柄
BOOL WINAPI CertCloseStore(
HCERTSTORE hCertStore, //证书存储区句柄
DWORD dwFlags
);
第二个参数一般为0,关闭了存储区,但是里面内容并没有释放
假如为CERT_CLOSE_STORE_CHECK_FLAG,检查没有释放空间的证书,CRL和CTL内容。他将返回一个错误报告。一般只用用于程序的诊断工具。
假如为CERT_CLOSE_STORE_FORCE_FLAG,则强制释放相关空间。他只在存储区打开并且存储区以及其相关内容没有被别的程序调用的时候使用才安全的。
4,CertDuplicateStore复制存储区,其reference count 也将增一,返回一个存储区的句柄
HCERTSTORE WINAPI CertDuplicateStore(
HCERTSTORE hCertStore
);
5,CertFindCertificateInStore从证书存储区中寻找符合指定要求的证书内容
PCCERT_CONTEXT WINAPI CertFindCertificateInStore(
HCERTSTORE hCertStore, //打开的证书存储区的句柄
DWORD dwCertEncodingType, //指定编码的类型,一般为X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
DWORD dwFindFlags, //用来修改查找规则,一般都不用并且把它设置为0
DWORD dwFindType, //指定的查找类型,类型中多,例如CERT_FIND_CERT_ID
const void* pvFindPara, //需要查找的内容
PCCERT_CONTEXT pPrevCertContext //返回最近一次返回的CERT_CONTEXT结构。
);
例如:CertFindCertificateInStore(hSystemStore,MY_ENCODING_TYPE,0,CERT_FIND_SUBJECT_STR,L"Cert_subject_1",NULL);
6,CertCreateCertificateContext从一个编码证书创建一个证书内容
PCCERT_CONTEXT WINAPI CertCreateCertificateContext(
DWORD dwCertEncodingType, //指定编码的类型,一般为X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
const BYTE* pbCertEncoded, //包含编码证书内容的指针
DWORD cbCertEncoded //编码证书数据的长度
);
7,CertAddCertificateContextToStore将一个证书内容增加到证书存储区中。
BOOL WINAPI CertAddCertificateContextToStore(
HCERTSTORE hCertStore, //证书存储区的句柄
PCCERT_CONTEXT pCertContext, //CERT_CONTEXT结构指针
DWORD dwAddDisposition, //指定与已存在相同证书的操作,例如CERT_STORE_ADD_ALWAYS
PCCERT_CONTEXT* ppStoreContext //一个证书的复制的指针,可以为NULL,说明不需要返回证书的复制。
);
8,CertAddCertificateLinkToStore增加一个从一个证书存储区中证书内容到另一个证书存储区的连接
BOOL WINAPI CertAddCertificateLinkToStore(
HCERTSTORE hCertStore, //需要被增加的证书存储区的句柄
PCCERT_CONTEXT pCertContext, //CERT_CONTEXT结构指针
DWORD dwAddDisposition, //指定与已存在相同证书的操作,例如CERT_STORE_ADD_ALWAYS
PCCERT_CONTEXT* ppStoreContext //一个连接的复制的指针,可以为NULL,说明不需要返回证书的复制。
);
9, CertEnumCertificatesInStore从证书存储区中获取第一或者下一个证书。使用循环,他可以获取存储区所有的证书序列
PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(
HCERTSTORE hCertStore, //证书存储区的句柄
PCCERT_CONTEXT pPrevCertContext //上一个证书内容的CERT_CONTEXT结构指针,当第一次开始列举时参数必须为NULL
);
10,CryptUIDlgViewContext显示一个证书,CTL或者CRL内容
BOOL WINAPI CryptUIDlgViewContext(
DWORD dwContextType, //表示指向何种类型。参数有CERT_STORE_CERTIFICATE_CONTEXT,CERT_STORE_CRL_CONTEXT,CERT_STORE_CTL_CONTEXT
const void* pvContext, //要显示的证书,CRL或者CTL内容
HWND hwnd, //需要显示的窗口句柄,当为NULL的时候默认为桌面窗口
LPCWSTR pwszTitle, //显示的标题名,当为NULL时默认为内容类型
DWORD dwFlags, //暂时没被使用,并且必须为0
void* pvReserved //保留字,为将来使用。
);
例如:
CryptUIDlgViewContext(CERT_STORE_CERTIFICATE_CONTEXT,pCertContext,NULL,NULL,0,NULL);
11,CertGetNameString获取CERT_CONTEXT结构中的主题或者签发者,并且将他转化为以null结尾的字符串
DWORD WINAPI CertGetNameString(
PCCERT_CONTEXT pCertContext, //包含CERT_CONTEXT证书内容的指针
DWORD dwType, //指定如何找到名字,并且输出的格式,例如CERT_NAME_ATTR_TYPE
DWORD dwFlags, //指定需要处理的类型,CERT_NAME_ISSUER_FLAG请求签发者名字,不设置则代表主题名
void* pvTypePara, //或者是一个包含dwStrType的字节指针,或者是一个指定名字属性的对象标志符指针
LPTSTR pszNameString, //转换后返回的字符串指针
DWORD cchNameString //上一字符串长度,以NULL结尾
);
如:CertGetNameString(pCertContext,CERT_NAME_SIMPLE_DISPLAY_TYPE,0,NULL,pszNameString,128)
12,CertEnumCertificateContextProperties获取与证书内容相关的第一个或者下一个扩展属性
DWORD WINAPI CertEnumCertificateContextProperties(
PCCERT_CONTEXT pCertContext, //CERT_CONTEXT结构指针
DWORD dwPropId //Property number of the last property enumerated. 参数为0时,获取第一个属性
);
13,CertGetCertificateContextProperty获取每个扩展属性的信息。
BOOL WINAPI CertGetCertificateContextProperty(
PCCERT_CONTEXT pCertContext, //CERT_CONTEXT指针
DWORD dwPropId, //需要获取的属性,参数众多,例如CERT_ACCESS_STATE_PROP_ID
void* pvData, //接收返回的数据指针
DWORD* pcbData //数据长度指针
);
例如:CertGetCertificateContextProperty(pCertContext, dwPropId , NULL, &cbData)
14,CryptUIDlgSelectCertificateFromStore显示一个对话框,允许在其中选择指定的证书。
PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore(
HCERTSTORE hCertStore, //被查找的证书存储区句柄
HWND hwnd, //要显示的窗口句柄,NULL默认为桌面窗口
LPCWSTR pwszTitle, //对话框标题,NULL默认为“Select Certificate”
LPCWSTR pwszDisplayString, //在选中的对话框中显示的语句,NULL默认为"Select a certificate you wish to use"
DWORD dwDontUseColumn, //排除一些显示的列,例如CRYPTUI_SELECT_ISSUEDTO_COLUMN不显示ISSUEDTO信息
DWORD dwFlags, //暂时设置为0
void* pvReserved //保留字,还未使用。
);
15,CertCompareCertificateName比较两个证书CERT_NAME_BLOB结构是否一致,成功返回true,否则返回false;
BOOL WINAPI CertCompareCertificateName(
DWORD dwCertEncodingType, //指定编码的类型,一般为X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
PCERT_NAME_BLOB pCertName1, //CERT_NAME_BLOB指针
PCERT_NAME_BLOB pCertName2
);
16,BOOL WINAPI CertComparePublicKeyInfo(比较公钥信息。
DWORD dwCertEncodingType,
PCERT_PUBLIC_KEY_INFO pPublicKey1,
PCERT_PUBLIC_KEY_INFO pPublicKey2
);
17,BOOL WINAPI CertCompareCertificate(比较两个证书
DWORD dwCertEncodingType,
PCERT_INFO pCertId1,
PCERT_INFO pCertId2
);
18,BOOL WINAPI CertDeleteCertificateFromStore(从一个证书存储区中删除一个证书。
PCCERT_CONTEXT pCertContext
);
19,BOOL WINAPI CertSerializeCertificateStoreElement(serializes a certificate context's encoded certificate

and its encoded properties
PCCERT_CONTEXT pCertContext, //CERT_CONTEXT指针
DWORD dwFlags, //保留字,为将来使用,设置为0
BYTE* pbElement, //Pointer to a buffer that receives the serialized output, including the

encoded certificate and possibly its properties.
DWORD* pcbElement //上一参数的数据长度。
);
20,CertAddEncodedCertificateToStore从编码证书中创建一个证书内容并且把他加入证书存储区。
BOOL WINAPI CertAddEncodedCertificateToStore(
HCERTSTORE hCertStore, //证书存储区句柄
DWORD dwCertEncodingType, //指定编码的类型,一般为X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
const BYTE* pbCertEncoded, //编码证书指针
DWORD cbCertEncoded, //编码证书长度
DWORD dwAddDisposition, //指定当已存在该证书时的操作。例如CERT_STORE_ADD_ALWAYS
PCCERT_CONTEXT* ppCertContext//证书内容的指针。可以为NULL。
);
例如:CertAddEncodedCertificateToStore(hFileStore,MY_ENCODING_TYPE,pCertContext->pbCertEncoded,pCertContext-

>cbCertEncoded,CERT_STORE_ADD_USE_EXISTING,NULL)
21, CertAddEnhancedKeyUsageIdentifier 增加一个增强密钥用途
BOOL WINAPI CertAddEnhancedKeyUsageIdentifier(
PCCERT_CONTEXT pCertContext,//Cert_context结构。
LPCSTR pszUsageIdentifier //指定需要增加的OID
);
22,CertSetCertificateContextProperty设置指定的证书内容的扩展属性
BOOL WINAPI CertSetCertificateContextProperty(
PCCERT_CONTEXT pCertContext,
DWORD dwPropId,
DWORD dwFlags,
const void* pvData
);
22,CertNameToStr 转换编码后名字到以NULL结尾的字符串中。
DWORD WINAPI CertNameToStr(
DWORD dwCertEncodingType,
PCERT_NAME_BLOB pName,
DWORD dwStrType,
LPTSTR psz,
DWORD csz
);
23,CertStrToName转化一个以NULL结尾的字符串到证书的名字
BOOL WINAPI CertStrToName(
DWORD dwCertEncodingType,
LPCTSTR pszX500,
DWORD dwStrType,
void* pvReserved,
BYTE* pbEncoded,
DWORD* pcbEncoded,
LPCTSTR* ppszError
);
分享到:
评论

相关推荐

    学习cryptoapi的笔记

    微软加密服务体系CryptoAPI的结构如下图所示,微软加密服务体系包含三层结构和两个接口,分别为应用程序层、操作系统层(OS)、加密服务提供者层(Cryptographic Service Provider,CSP),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文件下载

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

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

    CryptoAPI培训教程

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

    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-js-develop.zip

    crypto-js-develop\src\sha3.js, 10236 , 2017-06-02 crypto-js-develop\src\sha384.js, 1833 , 2017-06-02 crypto-js-develop\src\sha512.js, 13077 , 2017-06-02 crypto-js-develop\src\tripledes.js, 23837...

    crypto_cryptoapi.rar_CRYPTO_Crypto++_cryptoAPI

    Crypto wrapper for Microsoft CryptoAPI.

Global site tag (gtag.js) - Google Analytics