���¼���ԭʼ��ҳ��ӡ

几个cryptoapi函数说明 - chaolumon的专栏 - 博客频道

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函数说明 - chaolumon的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/chaolumon/article/details/2746690
�Ķ�ģʽ — An Arc90 Laboratory Experiment

Crypto API相关推荐

  1. GPTEE中的Crypto API的使用

    文章目录 1.Crypto API函数总结 2.使用示例 2.1 RSA 2.2 AES 2.3 hash 1.Crypto API函数总结 TEE_AllocateOperation: 2.使用示例 ...

  2. Crypto API 学习笔记一

    标 题: [原创]Crypto API 学习笔记一 作 者: jdxyw 时 间: 2006-09-01,16:47 链 接: http://bbs.pediy.com/showthread.php? ...

  3. 使用windows crypto API加密解密

    2019独角兽企业重金招聘Python工程师标准>>> 其实,使用windows API编程并不难,首先要有信心.MSDN提供了详细的帮助和指南,许多问题,只要详细查阅MSND,完全 ...

  4. linux crypto API 学习

    linux 内核里实现了crypto模块,其用法介绍的很少: 参考:linux-3.18.21/Documentation/crypto/api-intro.txt Here's an example ...

  5. linux crypto cbc 接口,Linux 2.6.38.4: User-space interface for Crypto API

    linux2.6.38提供了一些应用层掉内核层加解密模块的接口,据说还支持硬件加密卡(未试). 下面是用openssl 和 内核分别进行aes加密的比较: #include #include #inc ...

  6. Bouncy Castle Crypto API c# port

    Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包.它支持大量的密码术算法,并提供 JCE 1.2.1 的实现.现在有了C#的版本.下面是网站上的介绍 This port ...

  7. Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性  应该内置到语言里面...

    Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性  应该内置到语言里面 1. 常用算法1 1.1. 目录2 1.2. 定义和用法编辑2 1.3 ...

  8. TEE_ObjectHandle在Crypto中的使用

    Storage API和Crypto API中都会依赖TEE_ObjectHandle,该结构体可用于存储: Secret key.Public keys.key-paris Persistent d ...

  9. linux加密框架 crypto 算法管理 - 哈希算法应用实例

    参考链接 Linux加密框架应用示例(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程_CHYabc123456hh的博客-CSDN博 ...

最新文章

  1. Python处理多行文本问题--一个简单方法读取多行fasta文件
  2. PDF发明者逝世,曾因学生建议转行计算机,享年81岁
  3. 查看git当前tag_常用的 Git 命令清单
  4. 1089 狼人杀-简单版 (20 分)
  5. java中异常+连接重置_是什么导致我的java.nett.ocketException:连接重置?
  6. mysql5.7主从复制遇到的坑
  7. 中概股信任危机?美证监会主席直言不要购买中概股股票
  8. java 线程 handler,java.lang.RuntimeException:处理程序(android.os.Handler)在死线程上向处理程序发送消息...
  9. Linux设备驱动程序学习 高级字符驱动程序操作[阻塞型I/O和非阻塞I/O]【转】
  10. 全局变量 局部变量 静态变量
  11. 一种设想:打造小程序版本公号和自托管的公号,将你的网站/blog做到微信/微信公号里且与PC端合一
  12. marlin2.0.x 固件相关配置文档说明
  13. 产品初探(一):面试经验记录
  14. 物联网与计算机的区别与联系,你真的知道什么是物联网?物联网芯片又和普通芯片有何区别?...
  15. Wireshark抓取网易音乐的下载地址
  16. 2019广工ACM校赛决赛A题:思维题 HDU 6461 zsl 和hzy的生存挑战
  17. AprilTag视觉定位系统
  18. 死链提交为什么不能提交 html文件,如何正确使用死链提交工具
  19. 机器人涂装工程师岗位英文缩写_公司里各职位名称的英文缩写
  20. 据我爱无人机网两家国外公司合作开展无人机货运服务

热门文章

  1. mysql 数据库快照迁移_快照方式备份mysql 数据库
  2. 万能的Python,不仅能开发效率高,还能绘画各种漫画图像
  3. netbeans 添加gif图片_怎么制作动态图片?手机如何制作清晰gif动图?
  4. android中menu菜单扩增_【已解决】Android添加Menu菜单
  5. 攻击面管理预防网络攻击原理?
  6. 简述sed、grep和parted的速查表
  7. acrh17华硕固件_华硕全新手游路由器RT-AC85P首发:雷达定向传输
  8. mysql文件头标记_通过文件头准确识别PHP上传的文件类型 ( 一 )
  9. 线段树(点查询、区间查询、区间修改)模板
  10. pytorch dropout_手把手带你使用字符级RNN生成名字 | PyTorch