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

📄 minica.cpp

📁 MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来
💻 CPP
📖 第 1 页 / 共 3 页
字号:
					//sCert = CertDB._chINFO;
					memcpy(sCert, pCertDB[j]->_chINFO, pCertDB[j]->_uLENGTH);
					dCertLen = pCertDB[j]->_uLENGTH;
					
					memcpy(sKey, pCertDB[j+1]->_chINFO, pCertDB[j+1]->_uLENGTH);
					dKeyLen = pCertDB[j+1]->_uLENGTH;
					sPwd = pCertDB[j+1]->_chPWD;
					
					bExter = TRUE;		//已经加载到了
					if(IsWindow(p_List->m_hWnd))
					{
						CString str;
						CString strInfo;

						if(i == 0)
							strInfo = MiniCT_1801;
						else if(i == 1)
							strInfo = MiniCT_1806;
						else if(i == 2)
							strInfo = MiniCT_1807;
						else if(i == 3)
							strInfo = MiniCT_1808;
						else if(i == 4)
							strInfo = MiniCT_1809;


						str.Format("加载外部%s...", strInfo);
						p_List->AddMsg(str,M_WARING);
					}
					break;
				}
			}
		}
		
	}
	if(!bExter)	//没有加载到外部证书
	{
		HRSRC hRsrc = FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_CERT),"CERT");
		dCertLen = SizeofResource(NULL, hRsrc); 
		HGLOBAL hgCert = LoadResource(NULL,hRsrc);
		memcpy(sCert, (LPSTR)LockResource(hgCert), dCertLen);

		hRsrc = FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_KEY),"CERT");
		dKeyLen = SizeofResource(NULL, hRsrc); 
		hgCert = LoadResource(NULL,hRsrc);
		memcpy(sKey, (LPSTR)LockResource(hgCert), dKeyLen);

		if(IsWindow(p_List->m_hWnd))
		{
			CString str;
//			str.Format("加载内部%s...",strInfo);
			str.Format("加载内部证书...",strInfo);
			p_List->AddMsg(str,M_WARING);
		}
	}
	return TRUE;
}

OsType CMiniCaApp::GetOsType()
{
	OsType  ShellType;
	DWORD winVer;
	OSVERSIONINFO *osvi;
	
	winVer=GetVersion();
	if(winVer<0x80000000)
	{/*NT */
		ShellType=WinNT3;
		osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
		if (osvi!=NULL)
		{
			memset(osvi,0,sizeof(OSVERSIONINFO));
			osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
			GetVersionEx(osvi);
			if(osvi->dwMajorVersion==4L)ShellType=WinNT4;
			else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==0L)ShellType=Win2000;
			else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==1L)ShellType=WinXP;
			free(osvi);
		}
	}
	else if(LOBYTE(LOWORD(winVer))<4)
		ShellType=Win32s;
	else
	{
		ShellType=Win95;
		osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
		if (osvi!=NULL)
		{
			memset(osvi,0,sizeof(OSVERSIONINFO));
			osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
			GetVersionEx(osvi);
			if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)ShellType=Win98;
			else if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)ShellType=WinME;
			free(osvi);
		}
	}
	return ShellType;
}

CImageList * CMiniCaApp::GetImgList()
{
	return &m_ImgList;

}

CString CMiniCaApp::GetAppPath()
{
	return m_AppPath;
}

BOOL CMiniCaApp::IsHpxs()
{
	return m_bHpxs;
}

//--------------------------------------------------------------------------- 
//函数输入Gb字符,返回Big5字符 
//--------------------------------------------------------------------------- 
CString CMiniCaApp::Gb2Big5(CString sGb) 
{ 
	char* pszGbt=NULL; //Gb编码的繁体字符 
	char* pszGbs=NULL; //Gb编码的简体字符 
	wchar_t* wszUnicode=NULL; //Unicode编码的字符 
	char* pszBig5=NULL; //Big5编码的字符 
	CString sBig5; //返回的字符串 
	int iLen=0; //需要转换的字符数 
	
	pszGbs = sGb.GetBuffer(0); //读入需要转换的字符参数 
	
	//计算转换的字符数 
	iLen = MultiByteToWideChar (936, 0, pszGbs, -1, NULL,0) ; 
	
	//给pszGbt分配内存 
	pszGbt = new char[iLen*2+1]; 
	//转换Gb码简体到Gb码繁体,使用API函数LCMapString 
	int iSucceed = LCMapString(0x0804,LCMAP_TRADITIONAL_CHINESE, pszGbs, -1, pszGbt, iLen*2); 
	
	//给wszUnicode分配内存 
	wszUnicode = new wchar_t[iLen+1]; 
	//转换Gb码到Unicode码,使用了API函数MultiByteToWideChar 
	iSucceed = MultiByteToWideChar (936, 0, pszGbt, -1, wszUnicode,iLen); 
	
	//计算转换的字符数 
	iLen = WideCharToMultiByte (950, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ; 
	//给pszBig5分配内存 
	pszBig5 = new char[iLen+1]; 
	//转换Unicode码到Big5码,使用API函数WideCharToMultiByte 
	iSucceed = WideCharToMultiByte(950, 0, (PWSTR) wszUnicode, -1, pszBig5,iLen, NULL, NULL) ; 
	
	//返回Big5码字符 
	sBig5 = pszBig5; 
	
	//释放内存 
	delete [] wszUnicode; 
	delete [] pszGbt; 
	delete [] pszBig5; 
	
	return sBig5; 
} 

//---------------------------- 
//函数输入Big5字符,返回Gb简体字符 
//---------------------------- 
CString CMiniCaApp::Big2Gb(CString sBig) 
{ 
   char* pszBig5=NULL; //Big5编码的字符 
   wchar_t* wszUnicode=NULL; //Unicode编码的字符 
   char* pszGbt=NULL; //Gb编码的繁体字符 
   char* pszGbs=NULL; //Gb编码的简体字符 
   CString sGb; //返回的字符串 
   int iLen=0; //需要转换的字符数 
   
   pszBig5=sBig.GetBuffer(0); //读入需要转换的字符参数 
   
   //计算转换的字符数 
   iLen=MultiByteToWideChar (950, 0, pszBig5, -1, NULL,0) ; 
   //给wszUnicode分配内存 
   wszUnicode=new wchar_t[iLen+1]; 
   //转换Big5码到Unicode码,使用了API函数MultiByteToWideChar 
   MultiByteToWideChar (950, 0, pszBig5, -1, wszUnicode,iLen);    
   //计算转换的字符数 
   iLen=WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ; 
   //给pszGbt分配内存 
   pszGbt=new char[iLen+1]; 
   //给pszGbs分配内存 
   pszGbs=new char[iLen+1]; 
   //转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte 
   WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, pszGbt,iLen, NULL, NULL) ; 

//转换Gb码繁体到Gb码简体,使用API函数LCMapString 
   LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, pszGbt, -1, pszGbs, iLen); 
   
   //返回Gb码简体字符 
   sGb=pszGbs; 
   
   //释放内存 
   delete [] wszUnicode; 
   delete [] pszGbt; 
   delete [] pszGbs; 
   
   return sGb; 
} 	

BOOL CMiniCaApp::CharSetIsBig()
{
	HDC hDc = GetWindowDC(NULL);
	int CharSet = GetTextCharset(hDc);
	ReleaseDC(NULL, hDc);
	m_bIsBig = (CharSet == CHINESEBIG5_CHARSET) ? TRUE : FALSE;
	return m_bIsBig;
}

BOOL CMiniCaApp::IsBig()
{
	return m_bIsBig;
}

CString CMiniCaApp::NormalCode(CString strGb)
{
	if(m_bIsBig) //繁体环境
		return Gb2Big5(strGb);
	else 
		return strGb;
}

CString CMiniCaApp::LmToHText(UCHAR * pValue, UINT uLen) //乱码转16进制
{
	char * pBuf = new char[2*uLen+1];
	memset(pBuf, 0, 2*uLen+1);
	for(unsigned i=0; i<uLen; i++)
	{
		sprintf(pBuf+i*2,"%02X",pValue[i]);//02x标示1个16进制变为2个字符,空补零
	}
	CString str;
	str.Format("%s",pBuf);
	delete [] pBuf;
	return str;
}

UINT CMiniCaApp::HTextToLm(char * pValue,char * pOut) //16进制转乱码
{
	UINT uLen = strlen(pValue);
	char temp[3]={0};//临时变量
	char * lm = new char[uLen];
	memset(lm,0,uLen);
	for(UINT j=0;j<uLen;j+=2)
	{
		strncpy(temp,pValue+j,2);
		lm[j/2]=HexToTen(temp);
	}
	memcpy(pOut,lm,uLen/2);
	delete [] lm;
	return uLen/2;
}

BOOL CMiniCaApp::IsXpStyle()
{
	return m_ThemeHelper.IsAppThemed();
}

/*
1、建議把嚮導改成spy by sby 的形式導引...
2、建議加入選項設定的help查詢功能
3、提高編碼到4096或更高..因為現在的加密要求以非常要求
4、建議提供線上申請憑證機制。 
5、建議加入對目錄檔案做加密解密的功能...
6、建議獨立出一支開啟瀏覽加密後的文件檔的程式^^*/
int CMiniCaApp::ExitInstance() 
{
	// TODO: Add your specialized code here and/or call the base class
//	_CrtDumpMemoryLeaks();	// leak 内存泄漏检测 2 - 2

	m_ImgList.DeleteImageList();

	//以下某些东西可能会使程序发生异常,需要最后添加
/*	CRYPTO_cleanup_all_ex_data();
	ERR_remove_state(0);
	CONF_modules_unload(1);
	CONF_modules_free();
	ERR_free_strings();
	EVP_cleanup();*/
	return CWinApp::ExitInstance();
}

BOOL CMiniCaApp::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (CSplashWnd::PreTranslateAppMessage(pMsg))
	{
        return TRUE;	//splash 3 -3 
    }	
	return CWinApp::PreTranslateMessage(pMsg);
}

BOOL WINAPI CMiniCaApp::MakeSureDirectoryPathExists(LPCTSTR pszDirPath)
{
    LPTSTR p, pszDirCopy;
    DWORD dwAttributes;

    // Make a copy of the string for editing.

    __try
    {
        pszDirCopy = (LPTSTR)_tCharAlloc(lstrlen(pszDirPath) + 1);

        if(pszDirCopy == NULL)
            return FALSE;

        lstrcpy(pszDirCopy, pszDirPath);

        p = pszDirCopy;

        //  If the second character in the path is "\", then this is a UNC
        //  path, and we should skip forward until we reach the 2nd \ in the path.

        if((*p == TEXT('\\')) && (*(p+1) == TEXT('\\')))
        {
            p++;            // Skip over the first \ in the name.
            p++;            // Skip over the second \ in the name.

            //  Skip until we hit the first "\" (\\Server\).

            while(*p && *p != TEXT('\\'))
            {
                p = CharNext(p);
            }

            // Advance over it.

            if(*p)
            {
                p++;
            }

            //  Skip until we hit the second "\" (\\Server\Share\).

            while(*p && *p != TEXT('\\'))
            {
                p = CharNext(p);
            }

            // Advance over it also.

            if(*p)
            {
                p++;
            }

        }
        else if(*(p+1) == TEXT(':')) // Not a UNC.  See if it's <drive>:
        {
            p++;
            p++;

            // If it exists, skip over the root specifier

            if(*p && (*p == TEXT('\\')))
            {
                p++;
            }
        }

		while(*p)
        {
            if(*p == TEXT('\\'))
            {
                *p = TEXT('\0');
                dwAttributes = GetFileAttributes(pszDirCopy);

                // Nothing exists with this name.  Try to make the directory name and error if unable to.
                if(dwAttributes == 0xffffffff)
                {
                    if(!CreateDirectory(pszDirCopy, NULL))
                    {
                        if(GetLastError() != ERROR_ALREADY_EXISTS)
                        {
                            _tCharFree(pszDirCopy);
                            return FALSE;
                        }
                    }
                }
                else
                {
                    if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
                    {
                        // Something exists with this name, but it's not a directory... Error
                        _tCharFree(pszDirCopy);
                        return FALSE;
                    }
                }
 
                *p = TEXT('\\');
            }

            p = CharNext(p);
        }
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
        // SetLastError(GetExceptionCode());
        _tCharFree(pszDirCopy);
        return FALSE;
    }

    _tCharFree(pszDirCopy);
    return TRUE;
}

⌨️ 快捷键说明

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