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

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

?? certcreate.cpp

?? 用于處理證書請求,生成證書的CA服務器源碼,
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
                                    (BYTE *)pbCert,
                                    cbSize,
                                    CERT_STORE_ADD_REPLACE_EXISTING,
                                    &pCertContext);
    if (!bRtn)
    {
    	dwError = GetLastError();
			break;
    }
*/


		pIssuerCertContext = FindCertificate(	ISSUERNAME, 
											szIssuerStore,
											CERT_SYSTEM_STORE_LOCAL_MACHINE, 
											&KeyId,
											&hIssuerProv, 
											&dwKeyType);
		if(!pIssuerCertContext)
		{
  		dwError = GetLastError();
			break;
  	}
		
		// Add CA Certificate to store
    bRtn = CertAddEncodedCertificateToStore(hStore,
                                    X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                                    (BYTE *)pIssuerCertContext->pbCertEncoded,
                                    pIssuerCertContext->cbCertEncoded,
                                    CERT_STORE_ADD_REPLACE_EXISTING,
                                    &pCertContext);
    if (!bRtn)
    {
    	dwError = GetLastError();
			break;
    }
	

		memset(&mem_blob,0,sizeof(mem_blob));
		bRtn = CertSaveStore(
								hStore,
								X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
								CERT_STORE_SAVE_AS_PKCS7,
								CERT_STORE_SAVE_TO_MEMORY,
								&mem_blob,//pbData,
								0);
		if (!bRtn)
		{
			dwError = GetLastError();
			break;
		}

		mem_blob.pbData = (BYTE *)HeapAlloc(hHeap, 0, mem_blob.cbData);
		if(!(mem_blob.pbData))
		{
			dwError = GetLastError();
			return -3002;
		}

		bRtn = CertSaveStore(
								hStore,
								X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
								CERT_STORE_SAVE_AS_PKCS7,
								CERT_STORE_SAVE_TO_MEMORY,
								&mem_blob,//pbData,
								0);
		if (!bRtn)
		{
			dwError = GetLastError();
			break;
		}

		memset(pbData,0,sizeof(pbData));
		XFBase64encode(mem_blob.pbData,mem_blob.cbData,pbData, FALSE);
		cbData = strlen((char *)pbData);

		
		WriteToFile(pbData,cbData,"CAcert.p7b");

		dwError = 0;
		break;
	} //end while


	{
		if (pCertContext) CertFreeCertificateContext(pCertContext);
		if (pIssuerCertContext) CertFreeCertificateContext(pIssuerCertContext);
		if (hStore) CertCloseStore(hStore, 0);
		if (hCryptProv) CryptReleaseContext(hCryptProv, 0);
		if (hIssuerProv) CryptReleaseContext(hIssuerProv, 0);
		if (KeyId) HeapFree(hHeap, 0, KeyId);
		if (mem_blob.pbData) HeapFree(hHeap,0,mem_blob.pbData);
	}
	
	return dwError;
}


int DecryptPwd(char *szPWD,	//in,out 用戶密碼的密文/明文(base64編碼)
			   int *nDataLen,//in,out 數據長度
			   int  nBufLen) //in 緩沖區長度	
{

	BOOL fResult = FALSE;
	HCRYPTPROV hProv = NULL;
	HCRYPTKEY hRSAKey = NULL;
	
	char szPWDdecode[1000];
	int	 nLen=0;

	if(*nDataLen > 1000)
		return -3009;

	//DECRYPT PWD

	fResult = CryptAcquireContext(&hProv,szContainer,szProvider,PROV_RSA_FULL,0);
	if (!fResult)
	{   
		printf("CryptAcquireContext failed with %X\n", GetLastError());
		return -3010;
	}

	fResult = CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hRSAKey);
	if (!fResult)
	{   
		printf("CryptGetUserKey failed with %X\n", GetLastError());
		return -3011;
	}


	nLen = *nDataLen;
	memset(szPWDdecode,0,sizeof(szPWDdecode));
	XFBase64decode((const unsigned char *)szPWD, (unsigned char *)szPWDdecode,(unsigned long &)nLen);

	
	

	fResult = CryptDecrypt(hRSAKey,0,1,0,(unsigned char *)szPWDdecode,(DWORD *)&nLen);
	if (!fResult)
	{   
		printf("CryptDecrypt failed with %X\n", GetLastError());
		return -3012;
	}

	memset(szPWD,0,nBufLen);
	//for base64
	XFBase64encode((const unsigned char*)szPWDdecode,nLen,(unsigned char *)szPWD,FALSE);
	*nDataLen = strlen(szPWD);

	//for no base64
	/*
	memcpy(szPWD,szPWDdecode,nLen);
	*nDataLen = nLen;
	*/
	return 0;
}


int VerifySign(unsigned char * pUserCert, //in 用戶證書,base64編碼
			   LPSTR szSign,//in 簽名值
			   LPSTR szRandom) //in 隨機數
{
	BOOL bRtn;
	DWORD dwError=0;
	DWORD dwSize;


	HANDLE hHeap = GetProcessHeap();
	LPSTR szStore="MyVerifyStore";
	WCHAR szwStore[260];
	PCCERT_CONTEXT pCertContext = NULL;
	HCERTSTORE hStore = NULL;
	HCRYPTPROV hCryptProv = NULL;
	HCRYPTPROV hProv = NULL;
	HCRYPTHASH hHash = NULL;
	HCRYPTKEY hPubKey = NULL; 

	unsigned char pbCert[MAXCERTLEN];
	DWORD cbSize;	
	DWORD dwKeySpec = AT_SIGNATURE;
	BOOL fFreeProv = TRUE;
	ALG_ID HashAlgId = CALG_SHA1;//CALG_MD5;//
	unsigned char szSignature[1000];
  DWORD dwSignature=1000; 
	BOOL bSign = FALSE;

	while(1)
	{
		
		XFBase64decode(pUserCert, pbCert, dwSize);
		
		// Open Certificate Store
		cbSize = dwSize;

		if (mbstowcs(szwStore, szStore, strlen(szStore)+1) == (size_t)-1)
		{
		   dwError = GetLastError();
			break;
		}

		hStore = CertOpenStore(CERT_STORE_PROV_MEMORY,//CERT_STORE_PROV_SYSTEM,
						  MYCODING_TYPE,
						  NULL,
						  CERT_SYSTEM_STORE_CURRENT_USER,
						  szwStore);
		if (!hStore)
		{
		  dwError = GetLastError();
		break;
		}


		// Add User Certificate to store
		bRtn = CertAddEncodedCertificateToStore(hStore,
									 X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
									 (BYTE *)pbCert,
									 cbSize,
									 CERT_STORE_ADD_REPLACE_EXISTING,
									 &pCertContext);

		if (!bRtn)
		{
			dwError = GetLastError();
			break;
		}
		
		//get PUBKEY
		bRtn = GetRSAKeyFromCert(pCertContext,
                                    bSign,
                                    &hProv,
                                    &hPubKey,
                                    &dwKeySpec,
                                    &fFreeProv);
		if (!bRtn)
		{
			dwError = -3200;
			break;
		}

		
		
		// Create Hash
		bRtn = CryptCreateHash(hProv, HashAlgId, 0, 0, &hHash);
		if (!bRtn)
		{
			dwError = GetLastError();
			break;
		}
		
		//Hash Data
		bRtn = CryptHashData(hHash, (const unsigned char *)szRandom, strlen(szRandom), 0);
		if (!bRtn)
		{
			dwError = GetLastError();
			break;
		}

		XFBase64decode((const unsigned char * )szSign, szSignature, dwSignature);
		// Verify Signature
		bRtn = CryptVerifySignature(hHash, szSignature, dwSignature, hPubKey, NULL, 0);
		if (!bRtn)
		{
			dwError = GetLastError();
			break;
		}
		break;
		
	}	//end while

	{
		if (pCertContext) CertFreeCertificateContext(pCertContext);
		if (hStore) CertCloseStore(hStore, 0);
		if (hCryptProv) CryptReleaseContext(hCryptProv, 0);
		if (hProv) CryptReleaseContext(hProv, 0);
		if (hHash) CryptDestroyHash(hHash); 
		if (hPubKey) CryptDestroyKey(hPubKey);
	}

	if(dwError == 0)	//驗證成功
		return 0;
	else
		return -3201;
}
			   

/*
int GenRSAKEY()
{
	int	 nERR=0;
	BOOL bRTN;
	HCRYPTPROV hCryptProv = 0;

	if(!CryptAcquireContext(&hCryptProv,                // 返回CSP句柄
								szContainer,                    // 密碼容器名
								szProvider,                      // NULL時使用默認CSP名(微軟RSA Base Provider)
								PROV_RSA_FULL,             // CSP類型
								0))                        // Flag values
		{ 
			if(!CryptAcquireContext(&hCryptProv, 
								  szContainer, 
								  szProvider, 
								  PROV_RSA_FULL, 
								  CRYPT_NEWKEYSET)) //創建以szContainer為名的密鑰容器
			{
				nERR = GetLastError();
				return nERR;
			}
		}


	bRTN =	CryptGenKey(hCryptProv, 
						AT_SIGNATURE, 
						0x04000000, 
						NULL);
	nERR = GetLastError();
	if(bRTN)
	{
		return nERR;
	} 

	bRTN =	CryptGenKey(hCryptProv, 
						AT_KEYEXCHANGE, 
						0x04000000, 
						NULL);
	nERR = GetLastError();
	if(bRTN)
	{
		return nERR;
	} 

	return 0;
}
*/

//pkcs10len	in/out  緩沖區長度/返回數據長度

int CreatePKCS10(char* szX509Name, char* pkcs10str, DWORD* pkcs10len)
{
	int	 nErr = 0;

	DWORD				cbNameEncoded;
	BYTE*				pbNameEncoded;
	CERT_NAME_BLOB		SubjNameBlob;
	CERT_REQUEST_INFO	CertReqInfo;
	HCRYPTPROV			hCryptProv;
	HCRYPTKEY			hPubKey = 0;

	DWORD					cbPublicKeyInfo;
	CERT_PUBLIC_KEY_INFO*	pbPublicKeyInfo;

	CRYPT_OBJID_BLOB			Parameters;
	CRYPT_ALGORITHM_IDENTIFIER  SigAlg;

	DWORD  cbEncodedCertReqSize;
	BYTE*  pbSignedEncodedCertReq;

	while(1)
	{

	if (!CertStrToName(MYCODING_TYPE, szX509Name, CERT_X500_NAME_STR, NULL, NULL, &cbNameEncoded, NULL)) {
		nErr = -3301;
		break;
	}

	if(!(pbNameEncoded = (BYTE*)malloc(cbNameEncoded))) {
		nErr = -3302;
		break;
	}

	if (!CertStrToName(MYCODING_TYPE, szX509Name, CERT_X500_NAME_STR, NULL, pbNameEncoded, &cbNameEncoded, NULL)) {
		free(pbNameEncoded);
		nErr = -3303;
		break;
	}

	SubjNameBlob.cbData = cbNameEncoded;
	SubjNameBlob.pbData = pbNameEncoded;
	CertReqInfo.Subject = SubjNameBlob;
	CertReqInfo.cAttribute = 0;
	CertReqInfo.rgAttribute = NULL;
	CertReqInfo.dwVersion = CERT_REQUEST_V1;


	if (!CryptAcquireContext(
				&hCryptProv,        // Address for handle to be returned.
				szSignContainer,      // Use the x509 name.
				szProvider,         // Use the default provider.
				PROV_RSA_FULL,      // Need to both encrypt and sign.
				0)) 
	{
		if (!CryptAcquireContext(
			&hCryptProv,        // Address for handle to be returned.
			szSignContainer,//szContainer,               // Use the x509 name.
			szProvider,               // Use the default provider.
			PROV_RSA_FULL,      // Need to both encrypt and sign.
			CRYPT_NEWKEYSET)) 
		{
			nErr = -3304;
			break;
		}
	}

	// Generate Private/Public key pair
    if (!CryptGenKey (hCryptProv, AT_SIGNATURE, CRYPT_EXPORTABLE, &hPubKey)) {
		free(pbNameEncoded);
		nErr = -3305;
		break;
	}

	if (!CryptGenKey(hCryptProv, AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &hPubKey)) 
	{
		nErr = -3306;
		break;
	}

	
	if (!CryptExportPublicKeyInfo(
          hCryptProv,            // Provider handle
          AT_SIGNATURE,          // Key spec
          MYCODING_TYPE,      // Encoding type
          NULL,                  // pbPublicKeyInfo
          &cbPublicKeyInfo))     // Size of PublicKeyInfo
	{
		nErr = -3307;
		break;
	}

	if (!(pbPublicKeyInfo = (CERT_PUBLIC_KEY_INFO*)malloc(cbPublicKeyInfo)))
	{
		nErr = -3308;
		break;
	}

	if (!CryptExportPublicKeyInfo(
          hCryptProv,            // Provider handle
          AT_SIGNATURE,          // Key spec
          MYCODING_TYPE,      // Encoding type
          pbPublicKeyInfo,       // pbPublicKeyInfo
          &cbPublicKeyInfo))     // Size of PublicKeyInfo
	{
		nErr = -3309;
		break;
	}

	CertReqInfo.SubjectPublicKeyInfo = *pbPublicKeyInfo;

	memset (&Parameters, 0, sizeof(Parameters));
	SigAlg.pszObjId = szOID_OIWSEC_sha1RSASign;
	SigAlg.Parameters = Parameters;
	
	if (!CryptSignAndEncodeCertificate(
          hCryptProv,                      // Crypto provider
          AT_SIGNATURE,                  // Key spec
          MYCODING_TYPE,                // Encoding type
          X509_CERT_REQUEST_TO_BE_SIGNED,  // Structure type
          &CertReqInfo,                    // Structure information

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线一区观看| 欧美日韩另类一区| 在线观看三级视频欧美| 欧美大片在线观看| 夜夜精品浪潮av一区二区三区| 久久97超碰国产精品超碰| 91久久人澡人人添人人爽欧美| 久久综合色综合88| 日韩av网站免费在线| 色网站国产精品| 中文字幕 久热精品 视频在线| 另类小说图片综合网| 在线这里只有精品| 亚洲女人****多毛耸耸8| 国产成人在线影院| 精品国产乱码久久久久久图片| 婷婷久久综合九色综合伊人色| av亚洲精华国产精华精华| 国产三级久久久| 国产在线精品一区二区不卡了 | 欧美日韩精品欧美日韩精品一| 国产精品国产三级国产普通话三级| 久久精品二区亚洲w码| 51久久夜色精品国产麻豆| 亚洲国产精品影院| 欧美探花视频资源| 亚洲电影你懂得| 欧美色综合天天久久综合精品| 亚洲色图制服诱惑| 在线视频国产一区| 亚洲福利视频三区| 欧美精品1区2区| 婷婷综合久久一区二区三区| 在线成人av影院| 青青草97国产精品免费观看| 69堂精品视频| 精品一区二区在线播放| 精品国产乱码久久久久久久久| 久久er99热精品一区二区| 精品国产伦一区二区三区观看方式| 精品影视av免费| 久久久噜噜噜久噜久久综合| 成人免费的视频| 亚洲精品美腿丝袜| 欧美精品日韩精品| 麻豆成人91精品二区三区| 欧美电视剧免费全集观看| 国产精品一线二线三线| 国产精品美女久久久久久久| av动漫一区二区| 亚洲国产欧美日韩另类综合| 51久久夜色精品国产麻豆| 精品午夜久久福利影院| 国产性色一区二区| 91极品视觉盛宴| 久久精品国内一区二区三区| 国产欧美精品一区aⅴ影院| 91首页免费视频| 日本不卡高清视频| 国产欧美精品区一区二区三区| 色综合久久88色综合天天| 日韩精品成人一区二区在线| 久久青草欧美一区二区三区| 91免费看视频| 精品在线视频一区| 亚洲人成网站在线| 日韩精品一区二区三区四区| 国产成人精品影院| 午夜精品久久久久| 中文字幕精品在线不卡| 欧美老女人在线| 成人一道本在线| 午夜视频一区二区| 中文一区二区在线观看 | www.久久久久久久久| 香蕉乱码成人久久天堂爱免费| 欧美精品一区在线观看| 色噜噜狠狠成人网p站| 久久69国产一区二区蜜臀| 一区二区成人在线| 中文字幕欧美三区| 日韩欧美亚洲国产精品字幕久久久| 色综合久久中文综合久久97| 国内久久婷婷综合| 天天亚洲美女在线视频| 国产精品不卡视频| 久久久精品影视| 欧美一区二区久久| 在线亚洲高清视频| av资源网一区| 懂色av一区二区三区免费看| 美女一区二区久久| 亚洲高清一区二区三区| 亚洲欧美怡红院| 国产精品久久夜| 国产视频在线观看一区二区三区| 欧美日韩精品一区视频| 99精品一区二区三区| 国产成人av电影在线| 精品一区二区三区香蕉蜜桃| 琪琪久久久久日韩精品| 亚洲一区二区在线免费观看视频| 国产精品乱人伦一区二区| 久久中文字幕电影| 精品日韩欧美在线| 日韩欧美的一区| 日韩视频在线一区二区| 91精品国产色综合久久| 欧美精品久久久久久久久老牛影院| 欧美在线看片a免费观看| 91在线国产福利| 色综合网站在线| 色老汉一区二区三区| 91国偷自产一区二区使用方法| 99久久综合色| 色网综合在线观看| 欧美伊人精品成人久久综合97| 日本韩国欧美一区| 在线精品视频免费观看| 在线视频中文字幕一区二区| 欧美日韩一区高清| 91精品久久久久久蜜臀| 日韩精品一区二区三区中文不卡 | 国产精品久久久久久亚洲伦| 中文字幕一区二区三区色视频| 亚洲国产精品成人久久综合一区| 国产精品嫩草99a| 亚洲视频免费在线观看| 亚洲国产欧美在线| 美女www一区二区| 国产一区二区毛片| 99久久久国产精品| 欧美猛男gaygay网站| 日韩午夜av一区| 中文字幕欧美激情| 亚洲一区二区av在线| 日韩国产精品久久久| 国产精品99久久久久久似苏梦涵| a在线播放不卡| 宅男在线国产精品| 亚洲国产精品成人综合色在线婷婷 | 欧美自拍偷拍一区| 欧美一区二区三区在线看| 国产亚洲一区字幕| 亚洲欧美激情一区二区| 午夜成人免费电影| 成人小视频免费在线观看| 欧美视频精品在线观看| 久久欧美中文字幕| 亚洲国产成人porn| 国产成人免费网站| 欧美人妇做爰xxxⅹ性高电影| 久久久综合视频| 亚洲五码中文字幕| 国产美女一区二区三区| 欧美三级电影网站| 欧美国产日本韩| 免费看精品久久片| 91美女精品福利| 久久久www免费人成精品| 亚洲一区二区视频| 国产成人精品免费一区二区| 欧美日产国产精品| 亚洲人成在线观看一区二区| 极品尤物av久久免费看| 色噜噜久久综合| 中文字幕欧美区| 激情国产一区二区| 欧洲日韩一区二区三区| 久久久久久夜精品精品免费| 午夜激情综合网| 色一情一伦一子一伦一区| 国产日产欧产精品推荐色| 午夜欧美在线一二页| 91在线观看一区二区| 久久久久久久久久久久久女国产乱 | 欧美精品亚洲二区| 亚洲欧美中日韩| 国产高清久久久| 精品国产不卡一区二区三区| 日韩成人av影视| 欧美日韩国产a| 玉米视频成人免费看| 91污片在线观看| 国产欧美日韩在线| 国产精品18久久久久久久久| 日韩一卡二卡三卡国产欧美| 亚洲国产日日夜夜| 精品视频在线看| 一区二区免费看| 欧美三级一区二区| 亚洲国产wwwccc36天堂| 欧美性大战xxxxx久久久| 亚洲免费大片在线观看| 91久久香蕉国产日韩欧美9色| 亚洲精品中文在线影院| 91在线观看高清| 亚洲主播在线播放| 欧美日韩国产片| 麻豆一区二区在线|