亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? certtools.cpp

?? 用于處理證書請求,生成證書的CA服務器源碼,
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <wincrypt.h>
#include "certextern.h"
#include "certglobal.h"



char *bstr =
	"ABCDEFGHIJKLMNOPQ"
	"RSTUVWXYZabcdefgh"
	"ijklmnopqrstuvwxy"
	"z0123456789+/";

char rstr[] = {
	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  62,   0,   0,   0,  63, 
	 52,  53,  54,  55,  56,  57,  58,  59,  60,  61,   0,   0,   0,   0,   0,   0, 
	  0,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14, 
	 15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,   0,   0,   0,   0,   0, 
	  0,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40, 
	 41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,   0,   0,   0,   0,   0};


int queryobj();
int Decodepkcs10();


//base64 編碼
void XFBase64encode(const unsigned char* input,size_t l,unsigned char* output, bool add_crlf)
{
	size_t i = 0;
	size_t o = 0;
	
//	output = "";
	unsigned char *p = output;
	while (i < l)
	{
		size_t remain = l - i;
		if (add_crlf && o && o % 76 == 0)
		{
			*p = '\n';
			p++;
		}
		switch (remain)
		{
		case 1:
			*p = bstr[ ((input[i] >> 2) & 0x3f) ];
			p++;
			*p = bstr[ ((input[i] << 4) & 0x30) ];
			p++;
			*p = '=';
			p++;
			*p = '=';
			p++;
			break;
		case 2:
			*p = bstr[ ((input[i] >> 2) & 0x3f) ];
			p++;
			*p = bstr[ ((input[i] << 4) & 0x30) + ((input[i + 1] >> 4) & 0x0f) ];
			p++;
			*p = bstr[ ((input[i + 1] << 2) & 0x3c) ];
			p++;
			*p = '=';
			p++;
			break;
		default:
			*p = bstr[ ((input[i] >> 2) & 0x3f) ];
			p++;
			*p = bstr[ ((input[i] << 4) & 0x30) + ((input[i + 1] >> 4) & 0x0f) ];
			p++;
			*p = bstr[ ((input[i + 1] << 2) & 0x3c) + ((input[i + 2] >> 6) & 0x03) ];
			p++;
			*p = bstr[ (input[i + 2] & 0x3f) ];
			p++;
		}
		o += 4;
		i += 3;
	}
}


//base64 解碼
void XFBase64decode(const unsigned char * input, unsigned char *output, unsigned long& sz)
{
	size_t i = 0;
	size_t l = strlen((char *)input);
	size_t j = 0;
	
	while (i < l)
	{
		while (i < l && (input[i] == 13 || input[i] == 10))
			i++;
		if (i < l)
		{
			unsigned char b1 = (rstr[(int)input[i]] << 2 & 0xfc) +
					(rstr[(int)input[i + 1]] >> 4 & 0x03);
			output[j++] = b1;
			if (input[i + 2] != '=')
			{
				unsigned char b2 = (rstr[(int)input[i + 1]] << 4 & 0xf0) +
						(rstr[(int)input[i + 2]] >> 2 & 0x0f);
				output[j++] = b2;
			}
			if (input[i + 3] != '=')
			{
				unsigned char b3 = (rstr[(int)input[i + 2]] << 6 & 0xc0) +
						rstr[(int)input[i + 3]];
				output[j++] = b3;
			}
			i += 4;
		}
	}
	sz = j;
}


//
// Find Certificate with szCertName in the Subject name
//
/***************************************************************
* 函數名:			FindCertificate
* 功能:			用證書名查找證書.
* 輸入/輸出參數:	szCertName	in 證書名
*					szStore		in STORE名
*					dwFlags		in STORE標志
*					KeyId		out 密鑰標識
*					hProv		out CSP句柄
*					dwKeyType	out 密鑰類型
* 返回值:			正確返回指向證書上下文的指針,其他返回NULL。
* 程序員:		徐鋒			編程日期:2004/09/10
* 修改人員:					修改日期:
* 修改原因:
*****************************************************************/
PCCERT_CONTEXT FindCertificate(LPSTR szCertName, LPSTR szStore,
                               DWORD dwFlags, PCRYPT_DATA_BLOB *KeyId,
                               HCRYPTPROV *hProv, LPDWORD dwKeyType)
{
	int dwError=0;
   HANDLE hHeap = GetProcessHeap();
   PCRYPT_KEY_PROV_INFO KeyProvInfo;
   PCCERT_CONTEXT pCertContext = NULL;
   PCERT_EXTENSION pExtension = NULL;
   HCERTSTORE hStore = 0;
   WCHAR szwStore[20];
   CHAR szContainer[160];
   CHAR szProvider[160];
   BOOL bResult, bSuccess = FALSE;
   DWORD dwSize, dwAcquireFlags = 0;
   int i;

   while(1)
   {
      *KeyId = NULL;
      *hProv = 0;

      if (dwFlags == CERT_SYSTEM_STORE_LOCAL_MACHINE)
         dwAcquireFlags = CRYPT_MACHINE_KEYSET;

      // Convert Store string to Unicode
      i = MultiByteToWideChar(0, 0, szStore, -1, szwStore, 20);
      if (i == 0)
      {
		 dwError = GetLastError();
         break;
      }

      // Open Certificate store
      hStore = CertOpenStore(CERT_STORE_PROV_SYSTEM,
                           MYCODING_TYPE,
                           0, dwFlags, (LPVOID)szwStore);
      if (!hStore)
      {
		  dwError = GetLastError();
         break;
      }

      // Find Certificate with Subject name
      pCertContext = CertFindCertificateInStore(hStore,
                              MYCODING_TYPE,
                              0, CERT_FIND_SUBJECT_STR_A,
                              (LPVOID)szCertName, NULL);
      if (pCertContext)
      {
         // Get Key Provider Info size
         bResult = CertGetCertificateContextProperty(pCertContext,
                                             CERT_KEY_PROV_INFO_PROP_ID,
                                             NULL,
                                             &dwSize);
         if (!bResult)
         {
			 dwError = GetLastError();
            break;
         }

         // Allocate Key Provider Info
         KeyProvInfo = (PCRYPT_KEY_PROV_INFO)HeapAlloc(hHeap, 0, dwSize);
         if (!KeyProvInfo)
         {
			 dwError = GetLastError();
            break;
         }

         // Get Key Provider Info
         bResult = CertGetCertificateContextProperty(pCertContext,
                                             CERT_KEY_PROV_INFO_PROP_ID,
                                             (LPVOID)KeyProvInfo,
                                             &dwSize);
         if (!bResult)
         {
            break;
         }

         // Convert Container Name to ANSI
         i = WideCharToMultiByte(0, 0, KeyProvInfo->pwszContainerName,
                                 -1, szContainer, 160, NULL, NULL);
         if (i == 0)
         {
            break;
         }

         // Convert Provider Name to ANSI
         i = WideCharToMultiByte(0, 0, KeyProvInfo->pwszProvName, -1,
                                 szProvider, 160, NULL, NULL);
         if (i == 0)
         {
			dwError = GetLastError();
            break;
         }

         // Get Crypto Context of Certificate
 //        bResult = CryptAcquireContext(hProv, szContainer, szProvider,
 //                                      KeyProvInfo->dwProvType, dwAcquireFlags);
		 bResult = CryptAcquireContext(hProv, szContainer, szProvider,
                                      PROV_RSA_FULL, 0);
         if (!bResult)
         {
			 dwError = GetLastError();
            break;
         }

         // Return Key Spec
         *dwKeyType = KeyProvInfo->dwKeySpec;

         bSuccess = TRUE;

         // Find Subject Key Identifier Extension
         pExtension = CertFindExtension(szOID_SUBJECT_KEY_IDENTIFIER,
                                        pCertContext->pCertInfo->cExtension,
                                        pCertContext->pCertInfo->rgExtension);

         // If Subject Key Identifier Extension Exists
         if (pExtension)
         {

            // Get Size of Data Blob
            bResult = CryptDecodeObject(MYCODING_TYPE,
                                        szOID_SUBJECT_KEY_IDENTIFIER,
                                        pExtension->Value.pbData,
                                        pExtension->Value.cbData,
                                        0, NULL, &dwSize);
            if (!bResult)
            {
               break;
            }

            // Allocate Data Blob
            *KeyId = (PCRYPT_DATA_BLOB)HeapAlloc(hHeap, 0, dwSize);
            if (!(*KeyId))
            {
               break;
            }

            // Get Key Identifier Data Blob
            bResult = CryptDecodeObject(MYCODING_TYPE,
                                        szOID_SUBJECT_KEY_IDENTIFIER,
                                        pExtension->Value.pbData,
                                        pExtension->Value.cbData,
                                        0, (LPVOID)*KeyId, &dwSize);
            if (!bResult)
            {
               break;
            }
         }
      }
      else
      {
		 dwError = GetLastError();
         break;
      }

      bSuccess = TRUE;
	  break;
   }	//end while


   {
      // Clean up
      if (hStore) CertCloseStore(hStore, 0);
      if (KeyProvInfo) HeapFree(hHeap, 0, KeyProvInfo);
      if (!bSuccess)
      {
         if (pCertContext) CertFreeCertificateContext(pCertContext);
         pCertContext = NULL;
         if (*KeyId) HeapFree(hHeap, 0, *KeyId);
         *KeyId = NULL;
      }
   }

   return pCertContext;
}




/***************************************************************
* 函數名:			GetPubKeyFromP10
* 功能:			從PKCS#10內容中獲取公鑰信息.
* 輸入/輸出參數:	hHeap				in 堆指針
*					szP10				in PKCS#10內容
*					pvCertReqInfo		out 公鑰信息
* 返回值:			正確返回0,其他返回NULL。
* 程序員:		徐鋒			編程日期:2004/09/10
* 修改人員:					修改日期:
* 修改原因:
*****************************************************************/
int GetPubKeyFromP10(HANDLE hHeap,LPSTR szP10, CERT_REQUEST_INFO** pvCertReqInfo)
{

	BOOL bResult;
	int dwError;
	BYTE szBLOB[2048];
	DWORD pcbBinary=2048;
	DWORD pcbStructInfo;

	XFBase64decode((const unsigned char * )szP10, (unsigned char *)szBLOB, pcbBinary);

	bResult = CryptDecodeObjectEx(
	X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
	X509_CERT_REQUEST_TO_BE_SIGNED,//X509_CERT,
	(unsigned char *)szBLOB,
	pcbBinary,
	0,
	NULL,
	NULL,
	&pcbStructInfo
	);

	if (!bResult)
	{
		dwError = GetLastError();
		return -3001;
	}

	*pvCertReqInfo = (CERT_REQUEST_INFO*)HeapAlloc(hHeap, 0, pcbStructInfo);
	if(!(*pvCertReqInfo))
	{
		dwError = GetLastError();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩不卡在线| 久久电影国产免费久久电影| 国产主播一区二区三区| 久久色在线观看| 处破女av一区二区| 综合分类小说区另类春色亚洲小说欧美| 成人免费视频视频| 成人h动漫精品| 日韩和的一区二区| 欧美网站大全在线观看| 久久国产夜色精品鲁鲁99| 青青草一区二区三区| 成人欧美一区二区三区黑人麻豆 | 欧美一区二区三区免费在线看| 五月婷婷综合网| 久久久久国产精品人| 一道本成人在线| 蓝色福利精品导航| 国产伦精品一区二区三区免费迷| 亚洲日本免费电影| 一区二区三区四区五区视频在线观看| 欧美撒尿777hd撒尿| 成人精品在线视频观看| 91亚洲国产成人精品一区二区三 | 成人午夜在线播放| 91国偷自产一区二区开放时间 | 亚洲视频在线一区| 亚洲国产成人av好男人在线观看| 久久精品人人做| 欧美一区二区视频观看视频| 亚洲精品在线三区| 日韩精品一区二区三区视频| 欧美伊人久久久久久久久影院| 欧美一区二区高清| 国产精品久久久久影院亚瑟 | 国产盗摄精品一区二区三区在线 | 99re这里只有精品视频首页| 国产综合一区二区| 91麻豆精品秘密| 26uuu色噜噜精品一区二区| 亚洲日本va午夜在线电影| 久久精品噜噜噜成人av农村| 成人97人人超碰人人99| 日韩午夜激情视频| 日韩一区二区三区四区| 成人免费在线观看入口| 捆绑调教美女网站视频一区| 在线视频观看一区| 欧美少妇性性性| 国产精品午夜电影| 国产精品国产自产拍高清av王其| 日本三级韩国三级欧美三级| 色88888久久久久久影院按摩| 久久丝袜美腿综合| 日本成人在线电影网| 在线观看成人小视频| 欧美高清在线一区| 国产精品美女www爽爽爽| 亚洲成人一区二区| 久久精品久久综合| 欧美精品欧美精品系列| 日韩一区二区精品在线观看| 亚洲欧美视频在线观看| 午夜欧美2019年伦理| 成人av网站免费观看| 久久蜜臀精品av| 久久66热偷产精品| 成人精品国产福利| 国产视频一区二区在线观看| 国产一区二区三区免费播放| 欧美一区二区三区免费在线看 | 欧美日韩免费在线视频| 亚洲色图.com| 色八戒一区二区三区| 亚洲精品菠萝久久久久久久| 免费观看一级欧美片| 777a∨成人精品桃花网| 中文字幕高清一区| 成人激情免费视频| 国产精品免费丝袜| 不卡欧美aaaaa| 亚洲免费看黄网站| 91国产免费看| 日韩电影在线一区| 欧美成人一级视频| 亚洲精品欧美激情| 欧洲精品一区二区| 日韩在线观看一区二区| 欧美大片在线观看一区二区| 精品一区二区久久久| 亚洲国产精品精华液2区45| 99久久久久久| 亚洲风情在线资源站| 欧美成人精品福利| 成人伦理片在线| 亚洲国产综合在线| 日韩欧美一二三| 99re热这里只有精品视频| 亚洲欧美日韩国产手机在线| 欧美特级限制片免费在线观看| 男女性色大片免费观看一区二区| 欧美videofree性高清杂交| 国产精品自拍av| 欧美一区二区三区免费视频| 国产精品一区在线观看你懂的| 亚洲色大成网站www久久九九| 在线观看欧美黄色| 九九视频精品免费| 一区二区在线电影| 26uuu精品一区二区在线观看| 97se亚洲国产综合自在线不卡| 亚洲一区二区三区美女| 91福利在线观看| 国内精品不卡在线| 亚洲成人免费视频| 国产日韩欧美精品电影三级在线 | 亚洲视频免费观看| 精品少妇一区二区三区| a亚洲天堂av| 国产精品家庭影院| 欧美丰满少妇xxxxx高潮对白| 国产精品综合一区二区| 午夜精品123| 亚洲女人****多毛耸耸8| 欧美不卡一区二区三区| 欧美午夜理伦三级在线观看| 狠狠色丁香婷综合久久| 一区二区三区**美女毛片| 国产日韩欧美不卡在线| 日韩欧美一区中文| 欧美日韩五月天| 一本一本大道香蕉久在线精品| 精品一区二区精品| 日本女人一区二区三区| 一级特黄大欧美久久久| 国产精品久久久久婷婷二区次| 日韩精品中文字幕一区| 91精品国产综合久久久久久久| 91免费看`日韩一区二区| 成人午夜电影小说| 国产成人8x视频一区二区| 国产精品无圣光一区二区| 精品少妇一区二区三区免费观看| 欧美日韩三级在线| 欧美少妇一区二区| 欧美性猛片aaaaaaa做受| 色屁屁一区二区| 93久久精品日日躁夜夜躁欧美| 国产白丝精品91爽爽久久| 国产麻豆精品视频| 极品少妇xxxx偷拍精品少妇| 久久精品国产一区二区| 日韩精品欧美精品| 秋霞av亚洲一区二区三| 毛片基地黄久久久久久天堂| 亚洲国产成人在线| 中文字幕久久午夜不卡| 最新久久zyz资源站| 国产精品久久久久久久久果冻传媒| 国产欧美日本一区二区三区| 中文av字幕一区| 国产精品久久久久久久第一福利 | 日韩av电影天堂| 老鸭窝一区二区久久精品| 国产一区二区伦理片| 高清beeg欧美| 99国产精品久| 欧美日本乱大交xxxxx| 日韩欧美国产午夜精品| 国产亚洲一区二区在线观看| 国产精品素人一区二区| 亚洲精品国产无套在线观| 亚洲电影一级黄| 久88久久88久久久| 91色视频在线| 日韩亚洲欧美在线| 久久久www成人免费无遮挡大片 | 91国产福利在线| 欧美成人女星排行榜| 国产亚洲福利社区一区| 亚洲精品国产视频| 毛片av中文字幕一区二区| 国产91丝袜在线播放| 欧洲另类一二三四区| 日韩午夜在线播放| 自拍偷拍欧美激情| 日本免费新一区视频| 97精品国产97久久久久久久久久久久| 欧美性感一区二区三区| 精品久久人人做人人爰| 亚洲精品一二三区| 韩国一区二区三区| 欧亚一区二区三区| 国产欧美综合在线| 日韩电影在线观看电影| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲激情自拍偷拍| 寂寞少妇一区二区三区| 99久久综合精品| 欧美精品一区二区在线播放 |