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

📄 certdbpage.cpp

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

#include "stdafx.h"
#include "minica.h"
#include "CertDbPage.h"
#include "MiniMainDlg.h"
#include ".\GenericClass\Language.h"
#include "minict.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCertDbPage property page

IMPLEMENT_DYNCREATE(CCertDbPage, CPropertyPage)

CCertDbPage::CCertDbPage() : CPropertyPage(CCertDbPage::IDD)
{
	//{{AFX_DATA_INIT(CCertDbPage)
	//}}AFX_DATA_INIT
	m_IniPathName = ((CMiniCaApp *)AfxGetApp())->GetAppPath() +  "\\MiniCA.ini";
}

CCertDbPage::~CCertDbPage()
{
}

void CCertDbPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCertDbPage)
	DDX_Control(pDX, IDC_DB_SAVECDB, m_Bsavecdb);
	DDX_Control(pDX, IDC_DB_RESERTDB, m_Bresertdb);
	DDX_Control(pDX, IDC_TREE_SETUP, m_TreeSetup);
//	DDX_Control(pDX, IDC_EDIT_SAVE, m_CertSave);
	DDX_Control(pDX, IDC_DB_SELECT, m_Bselect);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCertDbPage, CPropertyPage)
//{{AFX_MSG_MAP(CCertDbPage)
	ON_BN_CLICKED(IDC_DB_RESERTDB, OnBResertdb)
	ON_BN_CLICKED(IDC_DB_SAVECDB, OnBSavecdb)
	ON_NOTIFY(NM_RCLICK, IDC_TREE_SETUP, OnRclickTreeSetup)
	ON_BN_CLICKED(IDC_DB_SELECT, OnBSelect)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCertDbPage message handlers

BOOL CCertDbPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();

	CXPStyleButtonST::SetAllThemeHelper(this, ((CMiniCaApp *)AfxGetApp())->GetThemeHelperST());
	m_Bsavecdb.SetIcon(IDI_ICON11);
	m_Bsavecdb.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);

	m_Bresertdb.SetIcon(IDI_ICON12);
	m_Bresertdb.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	// TODO: Add extra initialization here

	CImageList * pImgList = ((CMiniCaApp *)AfxGetApp())->GetImgList();
	m_TreeSetup.SetImageList(pImgList,TVSIL_NORMAL);//9 - 15


	//24:每个图片的宽度为24
	//24:每个图片的高度为24
	//TRUE  该图以透明方式显示
	//ILC_COLOR24,  颜色数为24位(其他可选常量祥见有关API)
	//16:    创建时容量为3个图片
	//1:    图片数量超出当前容量时,自动扩容,每次扩容1个图片的容量

/*	m_DbList.SetImageList(pImgList, LVSIL_SMALL);

	m_DbList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);

	m_DbList.InsertColumn(0, CMiniCaApp::NormalCode("证书分类"), LVCFMT_LEFT, 130);	
	m_DbList.InsertColumn(1, CMiniCaApp::NormalCode("序号"), LVCFMT_LEFT, 40);	
	m_DbList.InsertColumn(2, CMiniCaApp::NormalCode("密钥"), LVCFMT_LEFT, 40);	
	m_DbList.InsertColumn(3, CMiniCaApp::NormalCode("用户信息"), LVCFMT_LEFT, 135);	
	m_DbList.InsertColumn(4, CMiniCaApp::NormalCode("起始时间"), LVCFMT_LEFT, 70);	
	m_DbList.InsertColumn(5, CMiniCaApp::NormalCode("有效期"), LVCFMT_LEFT, 50);	
*/

//	m_TreeSetup.m_HtreeList.RemoveAll();//清除列表

	m_hItem[0] = m_TreeSetup.InsertItem(MiniCT_1800, 0, 0); //证书库 m_hItem[0]
	m_TreeSetup.SetItemImage(m_hItem[0],0,0);
	m_TreeSetup.SetItemData(m_hItem[0],0);//根为0
	HTREEITEM hItemSecond = TVI_ROOT;//二级
	HTREEITEM hItemThird = TVI_ROOT;//三级
	HTREEITEM hItemFour = TVI_ROOT;//四级


	m_hItem[1] = m_TreeSetup.InsertItem(MiniCT_1801, 0, 0, m_hItem[0]); //根证书(Highest) hItemSecond
	m_TreeSetup.SetItemImage(m_hItem[1],0,0);
	m_TreeSetup.SetItemData(m_hItem[1],1);//根证书为1

	m_hItem[2] = m_TreeSetup.InsertItem(MiniCT_1802, 0, 0,m_hItem[1]); //根证书公钥 hItemThird
	m_TreeSetup.SetItemImage(m_hItem[2],0,0);
	m_TreeSetup.SetItemData(m_hItem[2],10);//根证书公钥10

	m_hItem[3] = m_TreeSetup.InsertItem(MiniCT_1803, 0, 0,m_hItem[2]); //公钥文件 hItemFour
	m_TreeSetup.SetItemImage(m_hItem[3],3,3);
	m_TreeSetup.SetItemData(m_hItem[3],100);//根证书公钥文件为100
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[3]);

	m_hItem[4] = m_TreeSetup.InsertItem(MiniCT_1804, 0, 0,m_hItem[1]); //根证书私钥 hItemThird
	m_TreeSetup.SetItemImage(m_hItem[4],0,0); 
	m_TreeSetup.SetItemData(m_hItem[4],11);//根证书私钥为11

	m_hItem[5] = m_TreeSetup.InsertItem(MiniCT_1805, 0, 0,m_hItem[4]); //私钥文件 hItemFour
	m_TreeSetup.SetItemImage(m_hItem[5],3,3);
	m_TreeSetup.SetItemData(m_hItem[5],110);//根证书私钥文件为110
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[5]);

	m_hItem[6] = m_TreeSetup.InsertItem("********", 0, 0,m_hItem[4]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[6],5,5);
	m_TreeSetup.SetItemData(m_hItem[6],111);//根证书私钥密钥111

	m_hItem[7] = m_TreeSetup.InsertItem(MiniCT_1806, 0, 0,m_hItem[0]); //根证书(Higher) hItemSecond
	m_TreeSetup.SetItemImage(m_hItem[7],0,0);
	m_TreeSetup.SetItemData(m_hItem[7],2);//服务器证书为2

	m_hItem[8] = m_TreeSetup.InsertItem(MiniCT_1802, 0, 0,m_hItem[7]); //hItemThird
	m_TreeSetup.SetItemImage(m_hItem[8],0,0);
	m_TreeSetup.SetItemData(m_hItem[8],20);//服务器公钥20

	m_hItem[9] = m_TreeSetup.InsertItem(MiniCT_1803, 0, 0,m_hItem[8]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[9],3,3);
	m_TreeSetup.SetItemData(m_hItem[9],200);//公钥文件200
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[9]);

	m_hItem[10] = m_TreeSetup.InsertItem(MiniCT_1804, 0, 0,m_hItem[7]); //hItemThird
	m_TreeSetup.SetItemImage(m_hItem[10],0,0);
	m_TreeSetup.SetItemData(m_hItem[10],21);//服务器私钥为21

	m_hItem[11] = m_TreeSetup.InsertItem(MiniCT_1805, 0, 0,m_hItem[10]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[11],3,3);
	m_TreeSetup.SetItemData(m_hItem[11],210);//私钥文件为210
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[11]);

	m_hItem[12] = m_TreeSetup.InsertItem("********", 0, 0,m_hItem[10]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[12],5,5);
	m_TreeSetup.SetItemData(m_hItem[12],211);//私钥密钥211

	m_hItem[13] = m_TreeSetup.InsertItem(MiniCT_1807, 0, 0,m_hItem[0]); //根证书(High) hItemSecond
	m_TreeSetup.SetItemImage(m_hItem[13],0,0);
	m_TreeSetup.SetItemData(m_hItem[13],3);//客户端证书为3

	m_hItem[14] = m_TreeSetup.InsertItem(MiniCT_1802, 0, 0,m_hItem[13]); //hItemThird
	m_TreeSetup.SetItemImage(m_hItem[14],0,0);
	m_TreeSetup.SetItemData(m_hItem[14],30);//客户端公钥为30

	m_hItem[15] = m_TreeSetup.InsertItem(MiniCT_1803, 0, 0,m_hItem[14]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[15],3,3);
	m_TreeSetup.SetItemData(m_hItem[15],300);//客户端公钥文件为300
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[15]);

	m_hItem[16] = m_TreeSetup.InsertItem(MiniCT_1804, 0, 0,m_hItem[13]); //hItemThird
	m_TreeSetup.SetItemImage(m_hItem[16],0,0);
	m_TreeSetup.SetItemData(m_hItem[16],31);//客户端私钥为31

	m_hItem[17] = m_TreeSetup.InsertItem(MiniCT_1805, 0, 0,m_hItem[16]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[17],3,3);
	m_TreeSetup.SetItemData(m_hItem[17],310);//私钥文件为310
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[17]);

	m_hItem[18] = m_TreeSetup.InsertItem("********", 0, 0,m_hItem[16]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[18],5,5);
	m_TreeSetup.SetItemData(m_hItem[18],311);//私钥密钥为311

	m_hItem[19] = m_TreeSetup.InsertItem(MiniCT_1808, 0, 0,m_hItem[0]); //根证书(Low) hItemSecond
	m_TreeSetup.SetItemImage(m_hItem[19],0,0);
	m_TreeSetup.SetItemData(m_hItem[19],4);//加密证书4

	m_hItem[20] = m_TreeSetup.InsertItem(MiniCT_1802, 0, 0,m_hItem[19]); //hItemThird
	m_TreeSetup.SetItemImage(m_hItem[20],0,0);
	m_TreeSetup.SetItemData(m_hItem[20],40);//公钥为40

	m_hItem[21] = m_TreeSetup.InsertItem(MiniCT_1803, 0, 0,m_hItem[20]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[21],3,3);
	m_TreeSetup.SetItemData(m_hItem[21],400);//公钥文件400
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[21]);

	m_hItem[22] = m_TreeSetup.InsertItem(MiniCT_1804, 0, 0,m_hItem[19]); //hItemThird
	m_TreeSetup.SetItemImage(m_hItem[22],0,0);
	m_TreeSetup.SetItemData(m_hItem[22],41);//私钥为41

	m_hItem[23] = m_TreeSetup.InsertItem(MiniCT_1805, 0, 0,m_hItem[22]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[23],3,3);
	m_TreeSetup.SetItemData(m_hItem[23],410);//私钥文件为410
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[23]);

	m_hItem[24] = m_TreeSetup.InsertItem("********", 0, 0,m_hItem[22]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[24],5,5);
	m_TreeSetup.SetItemData(m_hItem[24],411);//私钥密钥为411

	m_hItem[25] = m_TreeSetup.InsertItem(MiniCT_1809, 0, 0,m_hItem[0]); //hItemSecond
	m_TreeSetup.SetItemImage(m_hItem[25],0,0);
	m_TreeSetup.SetItemData(m_hItem[25],5);//签名为5

	m_hItem[26] = m_TreeSetup.InsertItem(MiniCT_1802, 0, 0,m_hItem[25]); //hItemThird
	m_TreeSetup.SetItemImage(m_hItem[26],0,0);
	m_TreeSetup.SetItemData(m_hItem[26],50);//验证公钥50

	m_hItem[27] = m_TreeSetup.InsertItem(MiniCT_1803, 0, 0,m_hItem[26]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[27],3,3);
	m_TreeSetup.SetItemData(m_hItem[27],500);//公钥文件为500
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[27]);

	m_hItem[28] = m_TreeSetup.InsertItem(MiniCT_1804, 0, 0,m_hItem[25]); //hItemThird
	m_TreeSetup.SetItemImage(m_hItem[28],0,0);
	m_TreeSetup.SetItemData(m_hItem[28],51);//签名私钥为51

	m_hItem[29] = m_TreeSetup.InsertItem(MiniCT_1805, 0, 0,m_hItem[28]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[29],3,3);
	m_TreeSetup.SetItemData(m_hItem[29],510);//私钥文件510
	m_TreeSetup.m_HtreeList.AddTail(m_hItem[29]);

	m_hItem[30] = m_TreeSetup.InsertItem("********", 0, 0,m_hItem[28]); //hItemFour
	m_TreeSetup.SetItemImage(m_hItem[30],5,5);
	m_TreeSetup.SetItemData(m_hItem[30],511);//私钥密钥511



//	hItemFour = m_TreeSetup.InsertItem(_T("Your First Name (Example of edit box)"), 10, 10);
 //  m_TreeSetup.AddEditBox(hItemFour, RUNTIME_CLASS(CDemoEdit));


	m_TreeSetup.EnsureVisible(m_hItem[0]);

//	m_TreeSetup.Expand(m_TreeSetup.GetRootItem(),TVE_EXPAND);
	// CG: The following block was added by the ToolTips component.	{		// Create the ToolTip control.		m_toolTip.Create(this);		m_toolTip.AddTool(GetDlgItem(IDC_TREE_SETUP), "根证书库\r可设置五个不同级别的根证书");
		m_toolTip.AddTool(GetDlgItem(IDC_DB_RESERTDB), "重置证书库\r操作不可恢复");
		m_toolTip.AddTool(GetDlgItem(IDC_DB_SAVECDB), "保存证书库\r保存后新配置生效");
		m_toolTip.AddTool(GetDlgItem(IDC_DB_SELECT), "选择全局证书存储路径");
		m_toolTip.AddTool(GetDlgItem(IDC_EDIT_SAVE), "全局证书存储路径\r默认情况下的证书存储路径");
		m_toolTip.AddTool(GetDlgItem(IDC_DB_RADIO1), "全局证书命名方式\r行如:hpxs.Cer");
		m_toolTip.AddTool(GetDlgItem(IDC_DB_RADIO2), "全局证书命名方式\r行如:hpxs100.Cer");
		m_toolTip.AddTool(GetDlgItem(IDC_DB_RADIO3), "全局证书命名方式\r行如:100hpxs.Cer");
		m_toolTip.AddTool(GetDlgItem(IDC_DB_RADIO4), "全局证书命名方式\r行如:100.Cer");
		// TODO: Use one of the following forms to add controls:	}

	((CButton*)GetDlgItem(IDC_DB_RADIO2))->SetCheck(true);

	if(!((CMiniCaApp *)AfxGetApp())->IsXpStyle())
	{
		ClassXP(GetDlgItem(IDC_DB_RADIO1)->m_hWnd,TRUE);
		ClassXP(GetDlgItem(IDC_DB_RADIO2)->m_hWnd,TRUE);
		ClassXP(GetDlgItem(IDC_DB_RADIO3)->m_hWnd,TRUE);
		ClassXP(GetDlgItem(IDC_DB_RADIO4)->m_hWnd,TRUE);
		ClassXP(GetDlgItem(IDC_EDIT_SAVE)->m_hWnd,TRUE);
	}

	CXPStyleButtonST::SetAllThemeHelper(this, 
		((CMiniCaApp *)AfxGetApp())->GetThemeHelperST());

	m_Bselect.SetIcon(IDI_ICON12);
	m_Bselect.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	
	CString strRoot = ((CMiniCaApp *)AfxGetApp())->GetAppPath();
	CString strPath;
	GetPrivateProfileString("PATH", "Cert","",strPath.GetBuffer(256),255, m_IniPathName);
	strPath.ReleaseBuffer();//在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法
	if(strPath.IsEmpty())
		SetCaPath(strRoot);
	else
		SetCaPath(strPath);



	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}

/*void CCertDbPage::OnBSave() //写入注册表
{
	// TODO: Add your control notification handler code here
	CString strRegCode,strRootCert,strRootP12,strRootPwd,strServerP12,strServerPwd,strClientP12,strClientPwd;
	
	GetDlgItemText(IDC_EDIT2,strRootP12);
	GetDlgItemText(IDC_EDIT5,strRootPwd);
	
	GetDlgItemText(IDC_EDIT3,strServerP12);
	GetDlgItemText(IDC_EDIT6,strServerPwd);
	
	GetDlgItemText(IDC_EDIT4,strClientP12);
	GetDlgItemText(IDC_EDIT7,strClientPwd);
	
	GetDlgItemText(IDC_EDIT_REGCODE,strRegCode);
	
	CString RegMiniCA,RegRootCert,RegRootP12,RegRootPwd,RegServerP12,RegServerPwd,RegClientP12,
		RegClientPwd;//注册表项
	
	RegMiniCA.LoadString(IDS_REG_KEY);
	RegRootCert.LoadString(IDS_ROOT_CERT);
	RegRootP12.LoadString(IDS_ROOT_P12);
	RegRootPwd.LoadString(IDS_ROOT_PWD);
	RegServerP12.LoadString(IDS_SERVER_P12);
	RegServerPwd.LoadString(IDS_SERVER_PWD);
	RegClientP12.LoadString(IDS_CLIENT_P12);
	RegClientPwd.LoadString(IDS_CLIENT_PWD);
	
	HKEY hKey = NULL; 
	
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegMiniCA, 0, KEY_SET_VALUE, &hKey)!=ERROR_SUCCESS) //打开错误
	{
		return;
	}
	
	//加密各信息 注册码作为pwd
	char encInfo[512]={0};
	UINT encLen=0;
	char outMsg[100]={0};
	
	
	if(strRootP12.IsEmpty())//如果为空,则不进行加密,直接删除Reg
	{
		RegDeleteValue(hKey,RegRootP12);
	}
	else if(Crypt("idea-cbc",strRootP12.GetBuffer(0),strRootP12.GetLength(),encInfo,encLen,
		strRegCode.GetBuffer(0),1,outMsg,NULL))
	{
		if (RegSetValueEx(hKey,RegRootP12,0,REG_BINARY,(UCHAR *)encInfo,encLen)!=ERROR_SUCCESS)
		{
			AddMsg("创建RootP12键错误",M_ERROR);
		}
		memset(encInfo,0,512);
		encLen=0;
	}
	
	if(strRootPwd.IsEmpty())//如果为空,则不进行加密,直接删除Reg
	{
		RegDeleteValue(hKey,RegRootPwd);
	}
	else if(Crypt("idea-cbc",strRootPwd.GetBuffer(0),strRootPwd.GetLength(),encInfo,encLen,
		strRegCode.GetBuffer(0),1,outMsg,NULL))
	{
		if (RegSetValueEx(hKey,RegRootPwd,0,REG_BINARY,(UCHAR *)encInfo,encLen)!=ERROR_SUCCESS)
		{
			AddMsg("创建RegRootPwd键错误",M_ERROR);
		}
		memset(encInfo,0,512);
		encLen=0;
	}
	
	if(strServerP12.IsEmpty())//如果为空,则不进行加密,直接删除Reg
	{
		RegDeleteValue(hKey,RegServerP12);
	}
	else if(Crypt("idea-cbc",strServerP12.GetBuffer(0),strServerP12.GetLength(),encInfo,encLen,
		strRegCode.GetBuffer(0),1,outMsg,NULL))
	{
		if (RegSetValueEx(hKey,RegServerP12,0,REG_BINARY,(UCHAR *)encInfo,encLen)!=ERROR_SUCCESS)
		{
			AddMsg("创建RegServerP12键错误",M_ERROR);
		}
		memset(encInfo,0,512);
		encLen=0;
	}
	
	if(strServerPwd.IsEmpty())//如果为空,则不进行加密,直接删除Reg
	{
		RegDeleteValue(hKey,RegServerPwd);
	}
	else if(Crypt("idea-cbc",strServerPwd.GetBuffer(0),strServerPwd.GetLength(),encInfo,encLen,
		strRegCode.GetBuffer(0),1,outMsg,NULL))
	{
		if(RegSetValueEx(hKey,RegServerPwd,0,REG_BINARY,(UCHAR *)encInfo,encLen)!=ERROR_SUCCESS)
		{
			AddMsg("创建RegServerPwd键错误",M_ERROR);
		}
		memset(encInfo,0,512);
		encLen=0;
	}
	
	if(strClientP12.IsEmpty())//如果为空,则不进行加密,直接删除Reg
	{
		RegDeleteValue(hKey,RegClientP12);
	}
	else if(Crypt("idea-cbc",strClientP12.GetBuffer(0),strClientP12.GetLength(),encInfo,encLen,
		strRegCode.GetBuffer(0),1,outMsg,NULL))
	{

⌨️ 快捷键说明

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