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

📄 certextpage.cpp

📁 MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来
💻 CPP
📖 第 1 页 / 共 3 页
字号:

/*void CCertExtPage::OnBPath() //设置输出路径,如果路径下有文件则覆盖
{
	// TODO: Add your control notification handler code here
	LPITEMIDLIST pidlRoot = NULL; 
	LPMALLOC pMalloc;   
	if(NOERROR == SHGetSpecialFolderLocation(m_hWnd,CSIDL_DRIVES ,&pidlRoot))
	{
		BROWSEINFO bi;   //必须传入的参数,下面就是这个结构的参数的初始化 
		CString strDisplayName;// = CMiniCaApp::NormalCode("选择文件夹");;   //用来得到,你选择的活页夹路径,相当于提供一个缓冲区 
		bi.hwndOwner = GetSafeHwnd();   //得到父窗口Handle值 
		bi.pidlRoot=0;   //这个变量就是我们在上面得到的. 
		bi.pszDisplayName = strDisplayName.GetBuffer(MAX_PATH+1);   //得到缓冲区指针, 
		CString strTitle = CMiniCaApp::NormalCode("选择文件输出路径,路径下已有的同名文件将被覆盖!!");
		bi.lpszTitle = strTitle;  //设置标题 
		bi.ulFlags = BIF_RETURNONLYFSDIRS  | BIF_DONTGOBELOWDOMAIN  ;   //设置标志 
		bi.lpfn=NULL; 
		bi.lParam=0; 
		bi.iImage=0;   //上面这个是一些无关的参数的设置,最好设置起来, 
		ITEMIDLIST * pidl;  
		pidl = SHBrowseForFolder(&bi);   //打开对话框 
		if(!pidl)
			return;
		SHGetPathFromIDList(pidl,bi.pszDisplayName);	
		strDisplayName.ReleaseBuffer();   //和上面的GetBuffer()相对应 
		m_Path = strDisplayName;
		if(m_Path.Right(1) != "\\")//最后一个字符不是"/"
			m_Path += "\\";
		SetDlgItemText(IDC_EDIT_PATH,m_Path);	

		if(SUCCEEDED( SHGetMalloc ( &pMalloc ))) 
		{ 
			pMalloc->Free(pidlRoot); 
			pMalloc->Release(); 
		} 
	}
}
*/

/*void CCertExtPage::OnBPub() //选择公钥,选择p12
{
	// TODO: Add your control notification handler code here
	if(m_TypeP12==1)//选择共钥
	{
		CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
			CMiniCaApp::NormalCode("公钥文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"),NULL);
		CString strTitle = CMiniCaApp::NormalCode("选择公钥证书文件");
		dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
		if(dlgOpen.DoModal()!=IDOK) return;
		m_cert = dlgOpen.GetPathName();
		SetDlgItemText(IDC_EDIT_P12,m_cert);
		
	}
	else if(m_TypeP12==0 || m_TypeP12==2)//选择p12
	{
		CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
			CMiniCaApp::NormalCode("个人信息交换(*.pfx;*.p12)|*.pfx;*.p12|所有文件(*.*)|*.*||"),NULL);

		CString strTitle = CMiniCaApp::NormalCode("选择个人信息交换文件");
		dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
		if(dlgOpen.DoModal()!=IDOK) return;
		m_p12 = dlgOpen.GetPathName();
		SetDlgItemText(IDC_EDIT_P12,m_p12);
	}
	if(m_TypeP12==3)//选择共钥
	{
		CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
			CMiniCaApp::NormalCode("加密消息语法标准(*.p7b)|*.p7b|所有文件(*.*)|*.*||"),NULL);
		CString strTitle = CMiniCaApp::NormalCode("加密消息语法标准文件");
		dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
		if(dlgOpen.DoModal()!=IDOK) return;
		m_p7 = dlgOpen.GetPathName();
		SetDlgItemText(IDC_EDIT_P12,m_p7);
	}
	if(m_TypeP12==4)//选择P7B
	{
		CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
			CMiniCaApp::NormalCode("公钥文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"),NULL);
		CString strTitle = CMiniCaApp::NormalCode("选择公钥证书文件(可多选)");
		dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
		if(dlgOpen.DoModal()!=IDOK) return;
		m_cert = dlgOpen.GetPathName();
		SetDlgItemText(IDC_EDIT_P12,m_cert);
	}
}

void CCertExtPage::OnBKey() //选择私钥
{
	// TODO: Add your control notification handler code here
	if(m_TypeP12!=4)//选择P7B
	{
		CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
			CMiniCaApp::NormalCode("私钥证书文件(*.crt;*.cer;*.der;*.pem)|*.crt;*.cer;*.der;*.pem|所有文件(*.*)|*.*||"),NULL);
		
		CString strTitle = CMiniCaApp::NormalCode("选择私钥证书文件");
		dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
		
		if(dlgOpen.DoModal()!=IDOK) return;
		m_key = dlgOpen.GetPathName();
		SetDlgItemText(IDC_EDIT_KEY,m_key);
	}
	else
	{
		CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
			CMiniCaApp::NormalCode("黑名单(*.crl)|*.crl|所有文件(*.*)|*.*||"),NULL);
		
		CString strTitle = CMiniCaApp::NormalCode("选择黑名单文件");
		dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
		if(dlgOpen.DoModal()!=IDOK) return;
		m_crl = dlgOpen.GetPathName();
		SetDlgItemText(IDC_EDIT_KEY,m_crl);
	}
	
}*/

void CCertExtPage::OnBOk() //执行操作
{
	// TODO: Add your control notification handler code here
	GetDlgItemText(IDC_EDIT_PATH, m_Path);
	if(m_TypeP12!=2&&m_Path=="") 
	{
		AddMsg(MiniCT_0112, M_WARING);			//MiniCT_0112 "请选择输出路径!"
		return;
	}
	
	if(m_TypeP12==0)//提取证书操作
	{
		//读取p12文件
		GetDlgItemText(IDC_EDIT_P12, m_p12);
		if(m_p12.IsEmpty())
		{
			AddMsg(MiniCT_0700,M_WARING);		//MiniCT_0700 "请选择PFX文件!"
			return;
		}
		CString pwd,pwd2;
		GetDlgItemText(IDC_EDIT_PASSWORD,pwd); //p12 密钥
		CString filein,certout,keyout;
		certout=m_Path+"\\UserCert.crt";
		keyout=m_Path+"\\UserPriKey.crt";	
		GetDlgItemText(IDC_EDIT_PASSWORD2,pwd2); //加密 私钥 ,密钥
		
		char out[100]={0};
		if(!ParsePfx(m_p12.GetBuffer(0),0,pwd.GetBuffer(0),certout.GetBuffer(0),
			keyout.GetBuffer(0),pwd2.GetBuffer(0),m_CertFormat,out))
			AddMsg(out,M_ERROR);
		
		else//ok
			AddMsg(MiniCT_0701);		//MiniCT_0701 "分解PFX文件成功"
	}
	
	else if(m_TypeP12==1)//合并证书操作
	{
		GetDlgItemText(IDC_EDIT_P12, m_cert);
		GetDlgItemText(IDC_EDIT_KEY, m_key);
		if(m_cert.IsEmpty() || m_key.IsEmpty())
		{
			AddMsg(MiniCT_0702,M_WARING);	//MiniCT_0702 "请选择公钥或者私钥文件!"
			return;
		}
		CString fileout;
		fileout = m_Path+"\\Pkcs12.pfx";
		CString pwd,pwd2;
		GetDlgItemText(IDC_EDIT_PASSWORD2,pwd2);//加密PFX密钥
		GetDlgItemText(IDC_EDIT_PASSWORD,pwd);//解密私钥密钥

		char StreamP12[10240] = {0};
		UINT uP12Len = 10240;
		
		char out[100]={0};

		if(CreatePfx(StreamP12, uP12Len, pwd2.GetBuffer(0),
			   "MiniCA",/*IN 好记名称*/
			   m_cert.GetBuffer(0), 0,
			   m_key.GetBuffer(0), 0, pwd.GetBuffer(0),out))
		{
			CFile File;
			if(File.Open(fileout, CFile::modeCreate|CFile::modeWrite))	//存文件
			{
				File.Write(StreamP12, uP12Len);
				File.Close();
				AddMsg(MiniCT_0703);	//MiniCT_0703 "合并证书文件成功"
			}
			else
			{
				AddMsg(MiniCT_0704, M_ERROR);	//MiniCT_0704 "保存P12文件失败"
			}

		}

		else
			AddMsg(out,M_ERROR);
	}
	else if(m_TypeP12 == 2)//修改密钥
	{
		GetDlgItemText(IDC_EDIT_P12, m_p12);
		if(m_p12.IsEmpty())
		{
			AddMsg(MiniCT_0700,M_WARING);	//MiniCT_0700 "请选择PFX文件!"
			return;
		}
		CString pwd,pwd2,fileOut;
		GetDlgItemText(IDC_EDIT_PASSWORD,pwd);
		GetDlgItemText(IDC_EDIT_PASSWORD2,pwd2);
		char out[100]={0};
		if(ChangePfxPwd(m_p12.GetBuffer(0),pwd.GetBuffer(0),pwd2.GetBuffer(0),
			m_p12.GetBuffer(0),out))
			AddMsg(MiniCT_0705);	//MiniCT_0705 "修改PFX密码成功"
		else
			AddMsg(out,M_ERROR);
	}
	else if(m_TypeP12 == 3)//提取P7
	{
		GetDlgItemText(IDC_EDIT_P12, m_p7);
		if(m_p7.IsEmpty())
		{
			AddMsg(MiniCT_0706,M_WARING);	//MiniCT_0706 "请选择P7B文件!"
			return;
		}
		CString certout,keyout;
		certout = m_Path + "\\P7Cert";
		keyout = m_Path + "\\P7Crl";	
		
		char out[100]={0};
		
		if(!ParseP7b(m_p7.GetBuffer(0),	0,	m_CertFormat, certout, keyout, NULL, out))
			AddMsg(out,M_ERROR);
		else//ok
			AddMsg(MiniCT_0707);		//MiniCT_0707 "分解P7文件成功" 
	}
	else if(m_TypeP12==4)//合并P7操作
	{
		GetDlgItemText(IDC_EDIT_P12, m_cert);
		GetDlgItemText(IDC_EDIT_KEY, m_crl);
		if(m_cert.IsEmpty() && m_crl.IsEmpty())
		{
			AddMsg(MiniCT_0708,M_WARING);	//MiniCT_0708 "请选择公钥或者CRL文件!"
			return;
		}

		CString fileout;
		fileout = m_Path + "\\P7.p7b";
		
		char out[100]={0};
		
		std::list<std::string> CertList;
		
		// call GetStartPosition() to get the position of the first file in the control
		POSITION pos = m_XpEditP12.GetStartPosition();
		while (pos)
		{
			// add the file paths to the list
			CString str = m_XpEditP12.GetNextPathName(pos);
			CertList.push_back(str.GetBuffer(0));
			str.ReleaseBuffer();
		}
			
		if(CreateP7b(&CertList, m_crl.GetBuffer(0),
			fileout.GetBuffer(0), m_CertFormat, out))
			AddMsg(MiniCT_0709);	//MiniCT_0709 "合并证书文件成功"
		else
			AddMsg(out,M_ERROR);
	}
	
}

void CCertExtPage::SetCheck()
{
//	SetDlgItemText(IDC_EDIT_P12,"");
//	SetDlgItemText(IDC_EDIT_KEY,"");
	GetDlgItem(IDC_EXT_CHECK1)->EnableWindow(0);

	if(m_TypeP12 == 4)
		m_XpEditP12.ModifyFlags(0, FEC_MULTIPLE);
	else
        m_XpEditP12.ModifyFlags(FEC_MULTIPLE, 0);

	if(m_TypeP12==0)	//分解P12
	{
		//0,3,4
		GetDlgItem(IDC_EXT_CHECK1)->EnableWindow(1);

		GetDlgItem(IDC_STATIC_DEC)->EnableWindow(1);
		GetDlgItem(IDC_STATIC_ENC)->EnableWindow(1);
		GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
		GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
		GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);

		SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0710);//MiniCT_0710 "选择PFX:"
		m_XpEditP12.SetCaption(MiniCT_0711);//MiniCT_0711 "选择个人信息交换文件"
		m_XpEditP12.SetFilter(MiniCT_0712);//MiniCT_0712 "个人信息交换(*.pfx;*.p12)|*.pfx;*.p12|所有文件(*.*)|*.*||"
 
		SetDlgItemText(IDC_STATIC_EXT9,MiniCT_0713);//MiniCT_0713 "选择私钥:"
		m_XpEditKey.SetCaption(MiniCT_0714);//MiniCT_0714 "选择私钥证书文件"
		m_XpEditKey.SetFilter(MiniCT_0715);//MiniCT_0715 "私钥证书文件(*.crt;*.cer;*.der;*.pem)|*.crt;*.cer;*.der;*.pem|所有文件(*.*)|*.*||"


		SetDlgItemText(IDC_STATIC_DEC,MiniCT_0716);//MiniCT_0716 "解密PFX包密钥:"
		SetDlgItemText(IDC_STATIC_ENC,MiniCT_0717);//MiniCT_0717 "加密私钥密钥:"
//		SetDlgItemText(IDC_EDIT_P12,m_p12);	//复原原选择
		GetDlgItem(IDC_STATIC_EXT8)->EnableWindow(1);	
		GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);	
		
		GetDlgItem(IDC_EDIT_KEY)->EnableWindow(0);
		GetDlgItem(IDC_STATIC_EXT9)->EnableWindow(0);	
		GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
		
		GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);

		SetDlgItemText(IDC_B_OK,MiniCT_0718);//MiniCT_0718 "提取证书"
	//	GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(0);
	}
	else if(m_TypeP12==1)	//合并P12
	{
		GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);
		SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0719);//MiniCT_0719 "选择公钥:"
		m_XpEditP12.SetCaption(MiniCT_0720);//MiniCT_0720 "选择公钥证书文件"
		m_XpEditP12.SetFilter(MiniCT_0721);//MiniCT_0721 "公钥文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"

		SetDlgItemText(IDC_STATIC_DEC,MiniCT_0722);//MiniCT_0722 "解密私钥密钥:"
		SetDlgItemText(IDC_STATIC_ENC,MiniCT_0723);//MiniCT_0723 "加密PFX包密钥:"

		SetDlgItemText(IDC_STATIC_EXT9, MiniCT_0713);//MiniCT_0713
		m_XpEditKey.SetCaption(MiniCT_0714);//MiniCT_0714
		m_XpEditKey.SetFilter(MiniCT_0715);//MiniCT_0715
		SetDlgItemText(IDC_EDIT_P12, m_cert);	//复原原选择
		SetDlgItemText(IDC_EDIT_KEY, m_key);	//复原原选择
		GetDlgItem(IDC_STATIC_EXT8)->EnableWindow(1);	
		GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);	
		GetDlgItem(IDC_STATIC_DEC)->EnableWindow(1);
		GetDlgItem(IDC_STATIC_ENC)->EnableWindow(1);
		GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
		GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
		
		GetDlgItem(IDC_EDIT_KEY)->EnableWindow(1);
		GetDlgItem(IDC_STATIC_EXT9)->EnableWindow(1);	
		GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);	
		
		GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
		SetDlgItemText(IDC_B_OK,MiniCT_0724);//MiniCT_0724 "合并证书"
	}
	else if(m_TypeP12 == 2) //修改P12密码
	{
		GetDlgItem(IDC_STATIC_DEC)->EnableWindow(1);
		GetDlgItem(IDC_STATIC_ENC)->EnableWindow(1);
		GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
		GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
		GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);
		SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0710);//MiniCT_0710 "选择PFX:"
		m_XpEditP12.SetCaption(MiniCT_0711);//MiniCT_0711 "选择个人信息交换文件"
		m_XpEditP12.SetFilter(MiniCT_0712);//MiniCT_0712 "个人信息交换(*.pfx;*.p12)|*.pfx;*.p12|所有文件(*.*)|*.*||"

		SetDlgItemText(IDC_STATIC_EXT9,MiniCT_0713);//MiniCT_0713 "选择私钥:"
		m_XpEditKey.SetCaption(MiniCT_0714);//MiniCT_0714 "选择私钥证书文件"
		m_XpEditKey.SetFilter(MiniCT_0715);//MiniCT_0715 "私钥证书文件(*.crt;*.cer;*.der;*.pem)|*.crt;*.cer;*.der;*.pem|所有文件(*.*)|*.*||"
	
		SetDlgItemText(IDC_STATIC_DEC,MiniCT_0725);//MiniCT_0725 "原PFX包密钥:"
		SetDlgItemText(IDC_STATIC_ENC,MiniCT_0726);//MiniCT_0726 "新PFX包密钥:"
		SetDlgItemText(IDC_EDIT_P12, m_p12);	//复原原选择
		GetDlgItem(IDC_STATIC_EXT8)->EnableWindow(1);	
		GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);	
		
		GetDlgItem(IDC_EDIT_KEY)->EnableWindow(0);
		GetDlgItem(IDC_STATIC_EXT9)->EnableWindow(0);	
		GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);	
		SetDlgItemText(IDC_B_OK,MiniCT_0727);//MiniCT_0727 "修改密码"
	}
	else if(m_TypeP12 == 3) //P7分解
	{
		//0,3
		GetDlgItem(IDC_EXT_CHECK1)->EnableWindow(1);
	
		GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);
		//加密消息语法标注
		SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0728);//MiniCT_0728 "选择P7B:"
		m_XpEditP12.SetCaption(MiniCT_0729);//MiniCT_0729 "选择加密消息语法标准文件"
		m_XpEditP12.SetFilter(MiniCT_0730);//MiniCT_0730 "加密消息语法标准(*.p7b)|*p7b|所有文件(*.*)|*.*||"

		SetDlgItemText(IDC_STATIC_EXT9,MiniCT_0731);//MiniCT_0731 "选择CRL:"
		m_XpEditKey.SetCaption(MiniCT_0732);//MiniCT_0732 "选择黑名单文件"
		m_XpEditKey.SetFilter(MiniCT_0733);//MiniCT_0733 "黑名单(*.crl)|*.crl|所有文件(*.*)|*.*||"
		GetDlgItem(IDC_STATIC_DEC)->EnableWindow(0);
		GetDlgItem(IDC_STATIC_ENC)->EnableWindow(0);
		GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(0);
		GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(0);
//		SetDlgItemText(IDC_EDIT_P12, m_cert);	//复原原选择

⌨️ 快捷键说明

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