CSP:使用CryptoAPI获取X509证书的HASH(指纹)值
来源:互联网 发布:装修设计软件手机版 编辑:程序博客网 时间:2024/06/04 20:15
请关注之前的系列文章
使用CryptoAPI解码X509证书内容
使用CryptoAPI解析X509证书基本项
通过之前的文章,我们可以使用CryptoAPI解码X509证书文件,并且解析证书的基本项,这次我们尝试通过CryptoAPI获取证书的HASH值。证书的HASH值,也称指纹值,是检查证书的完整性、正确性的属性。如果使用父证书来验证证书的签名时,就会使用到HASH值。
通过Windows查看证书的方式看到的证书HASH(指纹)值如下:
有了前面系列文章的基础,我们假设已经通过CryptoAPI解码证书文件,并且得到了X509证书上下文句柄:
PCCERT_CONTEXTm_pCertContext;
那么可以通过函数CertGetCertificateContextProperty()来获取证书的HASH值,该函数的定义如下:
BOOL WINAPI CertGetCertificateContextProperty( PCCERT_CONTEXT pCertContext, DWORD dwPropId, void* pvData, DWORD* pcbData);其中:
pCertContext:为证书上下文句柄。
dwPropId:HASH算法ID,常用的有CERT_MD5_HASH_PROP_ID和CERT_SHA1_HASH_PROP_ID,分别对应MD5和SHA1。不过目前标准的V3版本的证书,都是使用SHA1算法。
pvData:接受HASH数据的Buffer地址。
pcbData:开始指明Buffer长度,函数返回后指明实际数据长度。
那么使用该函数获取证书HASH数据的完整函数如下:
ULONG CCSPCertificate::get_HashValue(LPBYTE lpbtHash, ULONG *pulHashLen){ULONG ulRes = 0;ULONG ulHashAlg = 0;if (!m_pCertContext){return CERT_ERR_INVILIDCALL;}if (!pulHashLen){return CERT_ERR_INVALIDPARAM;}get_HashAlgID(&ulHashAlg);switch(ulHashAlg){case CERT_HASH_ALG_MD5:CertGetCertificateContextProperty(m_pCertContext, CERT_MD5_HASH_PROP_ID, lpbtHash, pulHashLen);break;case CERT_HASH_ALG_SHA1:CertGetCertificateContextProperty(m_pCertContext, CERT_SHA1_HASH_PROP_ID, lpbtHash, pulHashLen);break;default:break;}if (*pulHashLen == 0){ulRes = GetLastError();}else{ulRes = CERT_ERR_OK;}return ulRes;}
使用本人的证书解析工具查看证书的HASH值如下图:
(该工具代码工程可以在本人的下载资源中下载,下载连接:X509证书解析工具V1.1)
0 0
- CSP:使用CryptoAPI获取X509证书的HASH(指纹)值
- 通过OpenSSL获取X509证书的HASH(指纹)值
- CSP:使用CryptoAPI解码X509证书内容
- CSP:使用CryptoAPI解码X509证书内容
- CSP:使用CryptoAPI解析X509证书基本项
- CSP:使用CryptoAPI解析X509证书基本项
- 使用CryptoAPI解析X509证书和P12证书
- 使用CryptoAPI解析X509证书和P12证书
- 使用CryptoAPI解析X509证书和P12证书
- 使用CryptoAPI解析X509证书和P12证书
- 使用CryptoAPI解析X509证书和P12证书
- 使用CryptoAPI解析X509证书和P12证书
- 使用CryptoAPI解析X509证书和P12证书
- [VC++]CryptoAPI解析X509证书信息
- 获取 X509 证书的 Version 信息 (openssl)
- Openssl编程获取X509证书的DNS
- Android使用命令获取sha1证书指纹数据的方法
- CSP介绍、以及使用CryptoAPI枚举CSP并获取其属性
- 【ecos】目录结构
- 快速排序算法
- laravel5.1 数据无法正常写入mysql
- Task Flow使用指南之十:通过程序调用TaskFlow
- Python爬虫
- CSP:使用CryptoAPI获取X509证书的HASH(指纹)值
- 同质问题
- JavaScript实现计算复杂计算公式(支持括号)
- 各种测试视频序列
- C# Excel 条件格式
- 对图片处理的三种方式作为参考学习
- 学习ExtJS Window常用方法
- 将jar包加入maven项目
- Spark开发指南