📄 safeinfopage.cpp
字号:
// SafeInfoPage.cpp : implementation file
//
#include "stdafx.h"
#include "minica.h"
#include "SafeInfoPage.h"
#include "MiniMainDlg.h"
#include "Evp.h"
#include ".\GenericClass\Language.h"
#include "minict.h"
//系统默认堆栈为1M,超过1M的数组定义会失败
const int dMaxMem = 1024*100;
const UINT uMsgLen = MAX_PATH + 100;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSafeInfoPage property page
IMPLEMENT_DYNCREATE(CSafeInfoPage, CPropertyPage)
CSafeInfoPage::CSafeInfoPage() : CPropertyPage(CSafeInfoPage::IDD)
{
//{{AFX_DATA_INIT(CSafeInfoPage)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pPageCdb = NULL;
}
CSafeInfoPage::~CSafeInfoPage()
{
}
void CSafeInfoPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSafeInfoPage)
// DDX_Control(pDX, IDC_EDIT_PWD, m_XpEditPwd);
// DDX_Control(pDX, IDC_EDIT_OUTFILE, m_XpEditOutFile);
// DDX_Control(pDX, IDC_EDIT_INFILE, m_XpEditInfile);
DDX_Control(pDX, IDC_BVSIGN, m_Bvsign);
DDX_Control(pDX, IDC_BSIGN, m_Bsign);
DDX_Control(pDX, IDC_BRSAKEY2, m_Brsakey2);
DDX_Control(pDX, IDC_BRSAKEY, m_Brsakey);
DDX_Control(pDX, IDC_BRSACERT2, m_Brsacert2);
DDX_Control(pDX, IDC_BRSACERT, m_Brsacert);
DDX_Control(pDX, IDC_BENC, m_Benc);
DDX_Control(pDX, IDC_BDIGEST, m_Bdigest);
DDX_Control(pDX, IDC_BDEC, m_Bdec);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSafeInfoPage, CPropertyPage)
//{{AFX_MSG_MAP(CSafeInfoPage)
ON_BN_CLICKED(IDC_BENC, OnBenc)
ON_BN_CLICKED(IDC_BDEC, OnBdec)
ON_BN_CLICKED(IDC_BDIGEST, OnBdigest)
ON_BN_CLICKED(IDC_BSIGN, OnBsign)
ON_BN_CLICKED(IDC_BVSIGN, OnBvsign)
ON_BN_CLICKED(IDC_BRSACERT, OnBrsacert)
ON_BN_CLICKED(IDC_BRSAKEY, OnBrsakey)
ON_BN_CLICKED(IDC_BRSAKEY2, OnBrsakey2)
ON_BN_CLICKED(IDC_BRSACERT2, OnBrsacert2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSafeInfoPage message handlers
void CSafeInfoPage::AddMsg(CString info, DWORD type)
{
((CMiniMainDlg *)AfxGetMainWnd())->AddMsg(MiniCT_0002, info, type);
}
BOOL CSafeInfoPage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: Add extra initialization here
CXPStyleButtonST::SetAllThemeHelper(this, ((CMiniCaApp *)AfxGetApp())->GetThemeHelperST());
m_Bvsign.SetIcon(IDI_ICON_DEC);
m_Bvsign.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_Bsign.SetIcon(IDI_ICON_ENC);
m_Bsign.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_Brsakey2.SetIcon(IDI_ICON_ENC);
m_Brsakey2.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_Brsakey.SetIcon(IDI_ICON_DEC);
m_Brsakey.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_Brsacert2.SetIcon(IDI_ICON_DEC);
m_Brsacert2.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_Brsacert.SetIcon(IDI_ICON_ENC);
m_Brsacert.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_Benc.SetIcon(IDI_ICON_ENC);
m_Benc.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_Bdigest.SetIcon(IDI_ICON_DEC);
m_Bdigest.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_Bdec.SetIcon(IDI_ICON_DEC);
m_Bdec.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
SetDlgItemText(IDC_COMBO_CRYPT,"idea-cbc");
SetDlgItemText(IDC_COMBO_DIGEST,"sha1");
SetDlgItemText(IDC_EDIT_PWD,"MiniCA");
((CComboBox *)GetDlgItem(IDC_COMBO_CRYPT))->SetCurSel(16);
((CComboBox *)GetDlgItem(IDC_COMBO_DIGEST))->SetCurSel(4);
if(!((CMiniCaApp *)AfxGetApp())->IsXpStyle())
{
ClassXP(GetDlgItem(IDC_COMBO_CRYPT)->m_hWnd,TRUE);
ClassXP(GetDlgItem(IDC_COMBO_DIGEST)->m_hWnd,TRUE);
ClassXP(GetDlgItem(IDC_EDIT_PWD)->m_hWnd,TRUE);
ClassXP(GetDlgItem(IDC_EDIT_OUTFILE)->m_hWnd,TRUE);
ClassXP(GetDlgItem(IDC_EDIT_INFILE)->m_hWnd,TRUE);
}
SetDlgItemText(IDC_EDIT_INFILE, "多年前有个俄国的无神论的学者。"
"一天,他在某大会场向人们讲上帝绝对不可能存在。当听众感觉他言之有理时,"
"他便高声向上帝挑战说:“上帝,假如你果真有灵,请你下来,"
"在这广大的群众面前把我杀死,我们便相信你是存在的了!”"
"他故意静静地等候了几分钟,当然上帝没有下来杀死他。"
"他便左顾右盼地向听众说:“你们都看见了,上帝根本不存在!” "
"怎知有一位妇人,头上裹着一条盘巾,站起来对他说:“先生,你的理论很高明,"
"你是个饱学之士。我只是一个农村妇人,不能向你反驳,"
"只想请你回答我心中的一个问题:我信奉耶稣多年以来,"
"心中有了主的救恩,十分快乐;我更爱读《圣经》,越读越有味,"
"我心中充满耶稣给我的安慰;因为信奉耶稣,人生有了最大的快乐。"
"请问:假如我死时发现上帝根本不存在,耶稣不是上帝的儿子,圣经全不可靠,"
"我这一辈子信奉耶稣,损失了什么?” 无神论学者想了好一会儿,"
"全场寂静无声,听众也很同意农村妇人的推理,"
"连学者也惊叹好单纯的逻辑,他低声回答:“女士,我想你一点儿损失也没有。”"
"农村妇人又向学者说道:“谢谢你这样好的回答。"
"我心中还有一个问题:当你死的时候,假如你发现果真有上帝,"
"圣经是千真万确,耶稣果然是神的儿子,也有天堂和地狱的存在,"
"我想请问,你损失了什么?”学者想了许久,竟无言以对。");
CMiniMainDlg * pMain = (CMiniMainDlg *)AfxGetMainWnd();
if(pMain)
{
CWinEvpSheet * pSheet = (CWinEvpSheet *)(pMain->GetPage("CWinEvpSheet"));
if(pSheet)
m_pPageCdb = (CSafeDataCdbPage*)pSheet->GetPage("CSafeDataCdbPage");
}
{
// Create the ToolTip control.
m_toolTip.Create(this);
m_toolTip.AddTool(GetDlgItem(IDC_COMBO_CRYPT), CMiniCaApp::NormalCode("操作使用的加密算法"));
m_toolTip.AddTool(GetDlgItem(IDC_EDIT_PWD), CMiniCaApp::NormalCode("操作使用的密钥"));
m_toolTip.AddTool(GetDlgItem(IDC_EDIT_INFILE), "原始信息");
m_toolTip.AddTool(GetDlgItem(IDC_EDIT_OUTFILE), "操作结果");
m_toolTip.AddTool(GetDlgItem(IDC_BENC), CMiniCaApp::NormalCode("加密信息"));
m_toolTip.AddTool(GetDlgItem(IDC_BDEC), CMiniCaApp::NormalCode("解密信息"));
m_toolTip.AddTool(GetDlgItem(IDC_COMBO_DIGEST), "操作使用的签名算法");
m_toolTip.AddTool(GetDlgItem(IDC_BDIGEST), "对指定消息进行摘要操作");
m_toolTip.AddTool(GetDlgItem(IDC_BSIGN), "对指定消息进行数字签名操作");
m_toolTip.AddTool(GetDlgItem(IDC_BVSIGN), "对指定消息和签名结果进行验证");
m_toolTip.AddTool(GetDlgItem(IDC_BRSACERT), "用公钥对对指定消息进行加密\r 密钥长度决定加密时间");
m_toolTip.AddTool(GetDlgItem(IDC_BRSAKEY), "用私钥对对指定消息进行解密\r 密钥长度决定解密时间");
m_toolTip.AddTool(GetDlgItem(IDC_BRSAKEY2), "用私钥对对指定消息进行加密\r 密钥长度决定加密时间");
m_toolTip.AddTool(GetDlgItem(IDC_BRSACERT2), "用公钥对对指定消息进行解密\r 密钥长度决定解密时间");
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSafeInfoPage::OnBenc()
{
// TODO: Add your control notification handler code here
CString strIn;
GetDlgItemText(IDC_EDIT_INFILE,strIn);
UINT len = strIn.GetLength();
if(len == 0)
{
AddMsg(MiniCT_0800,M_ERROR); //MiniCT_0800 "请输入要加密信息"
return;
}
unsigned char outbuf[dMaxMem] = "";
CString cpname,pwd;
char outMsg[uMsgLen] = "";
UINT templen = dMaxMem;
GetDlgItemText(IDC_COMBO_CRYPT,cpname);
GetDlgItemText(IDC_EDIT_PWD,pwd);
if(pwd.IsEmpty())
{
AddMsg(MiniCT_0801,M_ERROR); //MiniCT_0801 "请输入加密密钥"
return;
}
if(!CEvp::Crypt(cpname.GetBuffer(0),strIn.GetBuffer(0),len,(char *)outbuf,templen,
pwd.GetBuffer(0),1,outMsg))
AddMsg(outMsg,M_ERROR);
else
{
CString out = CMiniCaApp::LmToHText(outbuf,templen);
SetDlgItemText(IDC_EDIT_INFILE, out);
// SetDlgItemText(IDC_EDIT_OUTFILE, strIn);
Disply();
AddMsg(MiniCT_0802); //MiniCT_0802 "加密信息成功"
}
}
void CSafeInfoPage::OnBdec()
{
// TODO: Add your control notification handler code here
CString strIn;
GetDlgItemText(IDC_EDIT_INFILE,strIn);
UINT len = strIn.GetLength();
if(len == 0)
{
AddMsg(MiniCT_0803,M_ERROR); //MiniCT_0803 "请输入要解信息"
return;
}
unsigned char outbuf[dMaxMem] = "";//所有算法最长的块长度。
CString cpname,pwd;
char outMsg[uMsgLen] = "";
UINT templen = dMaxMem;
GetDlgItemText(IDC_COMBO_CRYPT,cpname);
GetDlgItemText(IDC_EDIT_PWD,pwd);
if(pwd.IsEmpty())
{
AddMsg(MiniCT_0804,M_ERROR); //MiniCT_0804 "请输入解密密钥"
return;
}
char strLm[2*dMaxMem] = {0};
UINT uLm = CMiniCaApp::HTextToLm(strIn.GetBuffer(0),strLm);
if(uLm == 0)
return;
if(!CEvp::Crypt(cpname.GetBuffer(0),strLm,uLm,(char *)outbuf,templen,
pwd.GetBuffer(0),0,outMsg))
{
// m_XpEditInfile.SetTextColor(RGB(128,0,0));
//SetDlgItemText(IDC_EDIT_INFILE,(char *)outbuf);
AddMsg(outMsg,M_ERROR);
}
else
{
SetDlgItemText(IDC_EDIT_INFILE,(char *)outbuf);
// SetDlgItemText(IDC_EDIT_OUTFILE, strIn);
Disply();
AddMsg(MiniCT_0805); //MiniCT_0805 "解密信息成功"
}
}
void CSafeInfoPage::OnBdigest()
{
// TODO: Add your control notification handler code here
CString strIn;
GetDlgItemText(IDC_EDIT_INFILE,strIn);
if(strIn.IsEmpty())
{
AddMsg(MiniCT_0806,M_ERROR);//MiniCT_0806 "请输入要摘要信息"
return;
}
CString mdname;
char outMsg[uMsgLen]="";
unsigned char md_value[MAX_MD_SIZE]="";
char buf[MAX_MD_SIZE*2] = "";
unsigned int md_len;
GetDlgItemText(IDC_COMBO_DIGEST,mdname);
if(!CEvp::Digest(mdname.GetBuffer(0),strIn.GetBuffer(0),strlen(strIn),md_value,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -