📄 certextpage.cpp
字号:
/*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 + -