`

学习使用cryptoapi第三天

    博客分类:
  • VC
阅读更多

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 
);
 
分享到:
评论

相关推荐

    Laravel开发-cryptoapi

    3. **CryptoApi库的集成**:将 CryptoApi 集成到 Laravel 项目中,需要在 `composer.json` 文件中添加库的依赖,并使用 `composer install` 命令安装。之后,你需要创建服务提供者和服务别名,以便在整个应用中方便...

    Apache Commons Crypto 1.0.0

    - **数据保护**:在存储或传输敏感信息时,可以使用Apache Commons Crypto进行数据加密,确保数据不被未经授权的第三方获取。 - **身份验证**:通过HMAC生成消息认证码,验证消息的完整性和来源。 - **网络安全**...

    CreateCert.zip

    "CreateCert.zip"这个压缩包文件提供了一种使用Delphi编程语言和Windows CryptoAPI(也称为Wincrypt)来生成自签名证书的方法。以下是关于这个主题的详细说明。 首先,CryptoAPI是微软提供的一个核心库,用于实现...

    微软数字证书操作API函数使用

    微软提供了丰富的API函数来处理数字证书的操作,这些函数通常位于Windows Cryptography API(也称为CNG,Cryptographic Next Generation)或者更早期的CryptoAPI(Cryptographic Application Programming Interface...

    vb6.0下AES加解密模块,可对字符和文件进行加解密

    这可能涉及到使用第三方库,如OpenSSL或Bouncy Castle的.NET版本,或者使用Microsoft的CryptoAPI。这些库提供了必要的加密函数,允许开发者在VB6.0代码中调用AES算法。 对于字符加解密,通常涉及字符串的处理。在VB...

    as3 des加解密示例(含Crypto库)

    为了简化这一过程,开发者通常会使用第三方库,例如Crypto库。Crypto库是一个强大的AS3加密库,包含了多种加密算法,包括DES,它使得在AS3中实现加解密变得更加便捷。 **使用Crypto库实现DES加解密** 1. **引入...

    MD5字符串加密和DES加密

    在VC++环境中,实现MD5加密通常需要引入第三方库,比如Microsoft CryptoAPI或者使用开源库如MD5++。通过这些库,你可以编写代码将输入的字符串转化为MD5摘要,基本流程包括初始化MD5上下文、处理数据、最终化并获取...

    crypto-checker

    项目目的:学习如何使用JWT Authorizarion,创建自定义钩子以及使用第三方Pars API 功能性 登记 授权 加密货币价格检查 将当前价格与上次检查时的价格进行比较 技术领域 React React上下文 React钩 useState ...

    3des算法

    - E(加密):最后,使用第三个密钥K3再进行一次DES加密。如果只有两个密钥,那么第二次操作是E而不是D。 3. **逆向过程**:解密时,按照相反的顺序使用相同的密钥进行三次操作,即DED或EDE。 在VC++环境下实现3...

    VB6_SHA256示例.zip

    在VB6中实现SHA256哈希功能通常需要引入第三方库或API,因为VB6标准库并不直接支持SHA256算法。这可能涉及到像Microsoft CryptoAPI这样的操作系统级别的加密服务,或者使用如Win32 CryptoAPI或.NET Framework的COM...

    1.5api-part3

    【标题】"1.5api-part3" 涉及的是Java API的一个特定部分,可能是对Java 1.5版本中API的第三部分进行讲解或示例。这可能包括了新特性的介绍、功能更新以及如何在实际编程中应用这些API。 【描述】"1.5api---part3...

    RSA.rar_RSA的数字签名_RSA签名_rsa C 签名_rsa 签名_vc rsa 签名

    在“RSA演示”文件中,可能包含了使用VC++和CryptoAPI或第三方库实现RSA数字签名的示例代码。通过分析和理解这段代码,开发者可以学习如何在实际项目中集成RSA数字签名功能。 **5. 结论** RSA的数字签名机制在保护...

    基于ASP的sha1与hmac_sha1不可逆加密.zip

    可以找到如“Microsoft CryptoAPI”或第三方组件如“Win32Crypt”来实现这一功能,通过这些工具,开发者可以创建一个密钥,然后使用该密钥和SHA1算法计算出消息的HMAC值。 在ASP中使用这两种加密方式时,需要注意...

    200多个常见的VC++加密算法代码_foughtxka_Vc_

    在VC++中实现DES,通常会用到如CryptoAPI或第三方库如OpenSSL。 2. **AES(Advanced Encryption Standard)**:AES是在DES之后的另一种标准对称加密算法,提供更高的安全性,支持128、192和256位的密钥长度。在VC++...

    Visual C++开发实例大全(提高卷)源代码实例573~578

    - 使用`CryptoAPI`:Windows操作系统提供的一套加密函数库,可以直接在Visual C++中调用,实现各种加密操作。 - **第三方库**:如OpenSSL,是一个强大的开源加密库,支持多种加密算法,可以在C++项目中集成。 4. ...

    PyPI 官网下载 | finlab_crypto-0.2.2-py3-none-any.whl

    在Python的生态系统中,PyPI(Python Package Index)是官方的第三方Python软件包仓库,开发者可以在这里发布和分享他们的模块、库和其他工具。`finlab_crypto-0.2.2-py3-none-any.whl` 是一个从PyPI下载的Python...

    Python库 | emmett_crypto-0.2.2-cp39-none-win_amd64.whl

    Python的包管理和模块系统使得开发者可以轻松地导入和使用第三方库,如emmett_crypto。 在使用emmett_crypto之前,开发者需要确保他们的环境符合库的依赖要求,例如Python版本和操作系统架构。在实际项目中,这个库...

    Demo CngRsa_visualbasic_

    这个项目可以帮助开发者了解如何在不使用第三方库的情况下,利用Windows内置的加密服务来处理RSA加解密操作。这对于需要在VB6应用程序中集成安全通信或数据保护功能的开发者来说非常有用。 【标签】"visualbasic" ...

    加密与解密,VC++课程自学资料

    在VC++环境中,我们可以使用标准库如CryptoAPI或者第三方库如OpenSSL来实现这些加密算法。例如,CryptoAPI是Windows操作系统内建的加密服务,提供了广泛的加密功能,而OpenSSL是一个开源的加密库,支持多种加密算法...

    VC C++加密算法

    在VC++中,可以使用标准库如CryptoAPI(Windows操作系统提供的加密API)或第三方库如OpenSSL来实现加密算法。CryptoAPI提供了包括哈希函数、对称加密和非对称加密在内的多种服务,而OpenSSL则是一个开源的加密库,...

Global site tag (gtag.js) - Google Analytics