亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久午夜老司机| 91福利国产成人精品照片| 国产福利精品一区| 欧美日韩成人综合天天影院| 亚洲欧美一区二区三区极速播放| 激情五月婷婷综合网| 91麻豆.com| 国产一区二区三区免费在线观看| 亚洲国产精品久久久久婷婷884| 国产欧美日产一区| 粗大黑人巨茎大战欧美成人| 欧美亚州韩日在线看免费版国语版| 加勒比av一区二区| 欧美午夜精品理论片a级按摩| 久久综合久久99| 午夜精品福利一区二区蜜股av| 成人网在线免费视频| 日韩欧美电影一区| 免费成人在线视频观看| 在线免费观看视频一区| 国产精品免费久久| 国产成人综合在线播放| 欧美大片一区二区| 日本成人超碰在线观看| 欧美亚洲精品一区| 亚洲色图色小说| 波多野结衣在线一区| 久久久久99精品国产片| 国产一区二区看久久| 日韩一级片在线观看| 午夜婷婷国产麻豆精品| 欧美亚洲愉拍一区二区| 亚洲伦理在线精品| 91在线观看美女| 国产精品久久久久久福利一牛影视| 国产一区二区电影| 日韩欧美一级二级三级久久久| 午夜精彩视频在线观看不卡| 欧美日韩不卡视频| 日韩电影在线免费观看| 欧美精三区欧美精三区| 丝袜美腿亚洲一区二区图片| 5月丁香婷婷综合| 免费成人av在线播放| 日韩精品一区二区三区四区| 美女一区二区三区| 久久综合九色综合久久久精品综合| 另类的小说在线视频另类成人小视频在线| 555www色欧美视频| 九九视频精品免费| 国产精品色哟哟网站| 不卡一区二区中文字幕| 一区二区三区精品| 91精品福利在线一区二区三区| 日韩av网站在线观看| 2022国产精品视频| 不卡一区在线观看| 亚洲成人1区2区| 精品捆绑美女sm三区| 成人听书哪个软件好| 亚洲精品少妇30p| 91精品国产手机| 国产精品1区二区.| 亚洲国产毛片aaaaa无费看| 日韩欧美在线一区二区三区| 国产麻豆精品在线| 亚洲欧美另类在线| 日韩美一区二区三区| av欧美精品.com| 日日欢夜夜爽一区| 国产亚洲一区二区三区四区| 色综合久久中文字幕| 麻豆精品一区二区综合av| 日本一区二区免费在线| 欧美色图激情小说| 国产精品一区二区三区乱码| 一区二区三区美女视频| 久久亚洲精精品中文字幕早川悠里| 91一区二区三区在线播放| 日韩国产精品久久久| 中文字幕久久午夜不卡| 欧美欧美午夜aⅴ在线观看| 国产精品一线二线三线精华| 一区二区三区波多野结衣在线观看| 日韩欧美国产电影| 欧美调教femdomvk| 不卡av在线网| 国产露脸91国语对白| 亚洲成av人片一区二区梦乃| 国产欧美日韩另类一区| 7777精品伊人久久久大香线蕉完整版 | 正在播放一区二区| www.欧美精品一二区| 免费观看在线色综合| 亚洲乱码国产乱码精品精小说| 久久精品视频一区| 日韩一二在线观看| 欧美日韩国产综合一区二区| 色婷婷精品大在线视频| 成人app在线| 国产成人精品综合在线观看 | 欧美高清激情brazzers| 99国产精品99久久久久久| 成人性色生活片免费看爆迷你毛片| 午夜精品影院在线观看| 亚洲一区二区三区自拍| 最新高清无码专区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美日韩不卡视频| 在线视频你懂得一区| 91影院在线免费观看| proumb性欧美在线观看| 成人黄色777网| 成人综合婷婷国产精品久久免费| 国产伦精品一区二区三区免费| 久久精品国产亚洲aⅴ| 免费成人在线网站| 久久er99精品| 久久精品国产精品青草| 久久超碰97人人做人人爱| 麻豆91精品视频| 国内精品写真在线观看| 韩国v欧美v日本v亚洲v| 国产精品1区2区3区| 国产iv一区二区三区| 99re成人在线| 欧美色国产精品| 日韩一区二区三区视频在线| 欧美一区二区黄色| 久久久久久**毛片大全| 国产日韩欧美精品电影三级在线 | 亚洲手机成人高清视频| 亚洲在线中文字幕| 三级在线观看一区二区| 精品综合久久久久久8888| 久久91精品久久久久久秒播| 国产精品一二一区| 99在线精品观看| 欧美日韩卡一卡二| 精品国产髙清在线看国产毛片| 久久久久国色av免费看影院| 亚洲视频在线观看三级| 亚洲成人在线网站| 国产精一区二区三区| 99r国产精品| 欧美一区二区三区免费观看视频| 精品久久人人做人人爽| 国产精品成人一区二区三区夜夜夜| 一区二区三区在线视频观看58| 图片区小说区区亚洲影院| 国内一区二区在线| 色94色欧美sute亚洲线路二| 91精品免费观看| 国产精品久久久久影视| 日韩精品国产精品| 成人av网站大全| 91麻豆精品国产| 国产精品国产三级国产有无不卡| 午夜精品福利一区二区三区av | 久久精品男人天堂av| 亚洲综合在线免费观看| 久久精品72免费观看| 91色乱码一区二区三区| 久久久一区二区| 亚洲国产综合人成综合网站| 国产精品夜夜爽| 日韩一区国产二区欧美三区| 国产精品不卡在线观看| 蜜桃av一区二区| 在线一区二区三区| 中文在线资源观看网站视频免费不卡| 午夜国产精品一区| 色综合久久中文综合久久牛| 26uuu色噜噜精品一区| 婷婷激情综合网| 日本道免费精品一区二区三区| 欧美精品一区二区在线观看| 亚洲福利一二三区| 99视频精品全部免费在线| 久久色在线观看| 麻豆精品在线播放| 在线观看91av| 亚洲v精品v日韩v欧美v专区| 91在线观看污| 亚洲国产经典视频| 国产在线一区观看| 日韩欧美在线123| 三级亚洲高清视频| 欧美日韩小视频| 亚洲一区在线观看视频| 97精品国产97久久久久久久久久久久 | 美女性感视频久久| 日韩免费电影一区| 久久精品国内一区二区三区| 欧美一区二区三区视频在线 | 亚洲精品高清视频在线观看| 91碰在线视频| 一区二区三区精品视频在线| 色狠狠一区二区三区香蕉| **欧美大码日韩|