⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 certdb.h

📁 MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来
💻 H
字号:
#include "CertKey.h"
#include "rc.h"//CRC
#include "CertInfoPage.h"

struct stuCertDB	
{
	UINT _uID;//所属证书类别
	UINT _uLENGTH;//证书长度
	char _chINFO[2022];//证书内容
	char _chPWD[10];//证书密钥
	BOOL _bUSED;//是否使用
	UINT _uCRC;//校验码
	BOOL SetCRC()
	{
		return CRC::GetCrc16((char *)this,sizeof(stuCertDB) 
			- sizeof(UINT) ,_uCRC);
	}
	BOOL CheckCRC()
	{
		UINT CRC16;
		CRC::GetCrc16((char *)this,sizeof(stuCertDB) 
			- sizeof(UINT) ,CRC16);
		if(CRC16 == _uCRC)
			return TRUE;
		else
			return FALSE;
	}
	stuCertDB()
	{
		memset(this,0,sizeof(stuCertDB));
	}
	BOOL LoadFromDB(CString & str)
	{
		if(CheckCRC())
		{
			char msg[100] = {0};
			if(_uID%100 == 10)//私钥
			{
				EVP_PKEY * pKey = CCertKey::LoadKey(_chINFO,_uLENGTH,_chPWD,msg);
				if(!pKey)
				{
					str = "无效";
					EVP_PKEY_free(pKey);			
					return FALSE;
				}
				else
				{
					str = "有效";
					EVP_PKEY_free(pKey);			
					return TRUE;
				}

			}
			else
			{
				char subject[512]={0};
				char out[100]={0};
				CString strSubject;
				X509 *peer = CCertKey::LoadCert(_chINFO,_uLENGTH,_chPWD,out);
				if (peer != NULL)
				{
					//	Server certificate
					UINT uKeyLen = CCertInfoPage::GetKeyLen(peer);
					if(!CCertInfoPage::GetSubjectInfo(peer,subject,out))	//929
					{
						strSubject = "NoSubject";
					}
					else
					{
						str.Format("%s",subject);
						int state=str.Find("CN=",0);
						int state1=str.Find("\n",state);
						strSubject = str.Mid(state+3,state1-state-4);
					}
					str.Format("%s:%db", strSubject, uKeyLen);
					X509_free(peer);
					return TRUE;
				}
				else
				{
					str = "公钥无效";
					return FALSE;
				}
				
			}
			
		}
		else
		{
			str = "CRC错误";
			return FALSE;
		}
		return TRUE;
		
	}
	BOOL LoadFromCert(char * pCertFile,UINT uId,char * pPwd,BOOL bUsed,CString & strCause)//从证书文件加载到结构
	{
		strcpy(_chPWD,pPwd);
		_bUSED = bUsed;
		CFile file;
		if(file.Open(pCertFile,CFile::modeRead))
		{
			int len = file.GetLength();
			if(len < 2022)
			{
				_uID = uId;
				_uLENGTH = len;
				file.Read(_chINFO,_uLENGTH);
				file.Close();
			}
			else
			{
				file.Close();
				strCause = " 长度超过系统限制,恢复原有配置";
				return FALSE;
			}
			
			char msg[100] = {0};
			if(uId%100!=10)//非私钥
			{
				if(!CCertKey::LoadCert(pCertFile,0,pPwd,msg))
				{
					strCause = " 无法加载,恢复原有配置";
					return FALSE;
				}
			}
			else
			{
				if(!CCertKey::LoadKey(pCertFile,0,pPwd,msg))
				{
					strCause = " 无法加载,恢复原有配置";
					return FALSE;
				}
			}
			return SetCRC();
		}
		else
		{
			strCause = " 无法打开,恢复原有配置";
			return FALSE;
		}
	}
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -