日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

解析X509证书

發布時間:2025/3/20 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解析X509证书 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:http://hi.baidu.com/lidhcn/item/5476d292a0710eda1a49df60

1.從磁盤上的證書文件中讀取證書數據

unsigned char* pbX509Data; // 證書數據?
  unsigned long ulX509DataLen; // 證書數據長度?
2.獲取CertContext?
  PCCERT_CONTEXT pCertContext = CertCreateCertificateContext(X509_ASN_ENCODING, pbX509Data, ulX509DataLen);?
  3.獲取證書信息
  pCertContext->pCertInfo->dwVersion; // 證書版本號?
  CRYPT_INTEGER_BLOB snBlob = pCertContext->pCertInfo->SerialNumber; // 證書SN?
  CERT_NAME_BLOB issuerBlob = pCertContext->pCertInfo->Issuer; // 證書頒發者?
  CERT_NAME_BLOB subjectBlob = pCertContext->pCertInfo->Subject; // 證書主題?
  // 證書有效起始日期?
  SYSTEMTIME sysTime;?
  memset(&sysTime, 0, sizeof(sysTime));?
  FileTimeToSystemTime(&pCertContext->pCertInfo->NotBefore, &sysTime);?
  char szTime[128] = {0};?
  sprintf_s(szTime, 128, "%d年%d月%d日%d:%d:%d", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);?
  // 證書有效終止日期?
  memset(&sysTime, 0, sizeof(sysTime));?
  FileTimeToSystemTime(&pCertContext->pCertInfo->NotAfter, &sysTime);?
  memset(szTime, 0, sizeof(szTime));?
  sprintf_s(szTime, 128, "%d年%d月%d日%d:%d:%d", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);?
4.創建臨時密鑰容器
  HCRYPTPROV hTmpProv = NULL;?
  CryptAcquireContext(&hTmpProv, "My_Temporary_Container", NULL, PROV_RSA_AES, 0); // NULL表示使用系統默認CSP?
5.向容器中導入公鑰,獲取公鑰句柄
  HCRYPTKEY hKey = NULL;?
  CERT_PUBLIC_KEY_INFO certPubKeyInfo = pCertContext->pCertInfo->SubjectPublicKeyInfo;?
  CryptImportPublicKeyInfo(hTmpProv, X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, &certPubKeyInfo, &hKey);?
6.導出公鑰(最好采用二次調用方式)
  unsigned char* pBuf = NULL;?
  unsigned long ulBufLen = 0;?
  CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, pBuf, &ulBufLen);?
  pBuf = new unsigned char[ulBufLen];?
  memset(pBuf, 0, ulBufLen);?
  CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, pBuf, &ulBufLen);?
7.獲取公鑰信息
  unsigned char* p = pBuf + sizeof(PUBLICKEYSTRUC);?
  (*(RSAPUBKEY*)p).bitlen; // 公鑰模長(以bit為單位)?
  (*(RSAPUBKEY*)p).pubexp; // 公鑰的e(注意字節順序)?
  p += sizeof(RSAPUBKEY); // 公鑰的n(注意字節順序)?
8.清理工作
delete[] pBuf;?
pBuf = NULL;?
CryptDestroyKey(hKey);?
CryptReleaseContext(hTmpProv, 0);?
CertFreeCertificateContext(pCertContext);

總結

以上是生活随笔為你收集整理的解析X509证书的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。