?? rsakeydlg.cpp
字號:
// RsaKey.cpp : implementation file
//
#include "stdafx.h"
#include "MixedCS.h"
#include "RsaKeyDlg.h"
#include "Window.h"
#include "GfL.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
extern CMixedCSApp theApp;
#define CHECK(x) {if( !(x) ) return;}
#define CHECK_MSG(x,msg) {if( !(x) ){CWindow::ShowMessage(msg);return;}}
/////////////////////////////////////////////////////////////////////////////
// CRsaKeyDlg dialog
CRsaKeyDlg::CRsaKeyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRsaKeyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRsaKeyDlg)
m_q = _T("");
m_p = _T("");
m_n = _T("");
m_e = _T("");
m_d = _T("");
m_plen = 100;
m_qlen = 100;
m_elen = 200;
//}}AFX_DATA_INIT
CBitmap bmp;
srand(GetTickCount());
do{theApp.bk_rsakey=rand()%5;}while(theApp.bk_rsakey==theApp.bk_mainui);
bmp.LoadBitmap(IDB_BKBITMAP1+theApp.bk_rsakey);
m_BkBrush = CreatePatternBrush ((HBITMAP)bmp.GetSafeHandle()) ;
bmp.DeleteObject();
p = q = n = BI.New(0);
}
void CRsaKeyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRsaKeyDlg)
DDX_Text(pDX, IDC_Q, m_q);
DDV_MaxChars(pDX, m_q, 300);
DDX_Text(pDX, IDC_P, m_p);
DDV_MaxChars(pDX, m_p, 300);
DDX_Text(pDX, IDC_N, m_n);
DDV_MaxChars(pDX, m_n, 600);
DDX_Text(pDX, IDC_E, m_e);
DDV_MaxChars(pDX, m_e, 600);
DDX_Text(pDX, IDC_D, m_d);
DDV_MaxChars(pDX, m_d, 600);
DDX_Text(pDX, IDC_ELen, m_elen);
DDX_Text(pDX, IDC_PLen, m_plen);
DDX_Text(pDX, IDC_QLen, m_qlen);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRsaKeyDlg, CDialog)
//{{AFX_MSG_MAP(CRsaKeyDlg)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_GetP, OnGetP)
ON_BN_CLICKED(IDC_GetQ, OnGetQ)
ON_BN_CLICKED(IDC_InputP, OnInputP)
ON_BN_CLICKED(IDC_InputQ, OnInputQ)
ON_BN_CLICKED(IDC_OutputD, OnOutputD)
ON_BN_CLICKED(IDC_OutputE, OnOutputE)
ON_BN_CLICKED(IDC_OutputN, OnOutputN)
ON_BN_CLICKED(IDC_OutputP, OnOutputP)
ON_BN_CLICKED(IDC_OutputQ, OnOutputQ)
ON_BN_CLICKED(IDC_GetKey, OnGetKey)
ON_EN_CHANGE(IDC_PLen, OnChangePLen)
ON_EN_CHANGE(IDC_QLen, OnChangeQLen)
ON_EN_CHANGE(IDC_P, OnChangeP)
ON_EN_CHANGE(IDC_Q, OnChangeQ)
ON_EN_CHANGE(IDC_N, OnChangeN)
ON_EN_CHANGE(IDC_E, OnChangeE)
ON_EN_CHANGE(IDC_D, OnChangeD)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRsaKeyDlg message handlers
HBRUSH CRsaKeyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if ( (nCtlColor==CTLCOLOR_EDIT) ||
(nCtlColor==CTLCOLOR_DLG) ||
(nCtlColor==CTLCOLOR_STATIC) )
{
pDC->SetBkMode (TRANSPARENT) ;
if(nCtlColor==CTLCOLOR_STATIC)
pDC->SetTextColor(RGB(0,0,255));
hbr = m_BkBrush ;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CRsaKeyDlg::OnOK()
{
// TODO: Add your control notification handler code here
CHECK( IDYES==MessageBox("真的要退出嗎? ","提示",MB_YESNO | MB_ICONQUESTION) )
::DeleteObject (m_BkBrush);
CDialog::OnOK();
}
void CRsaKeyDlg::OnCancel()
{
OnOK();
}
void CRsaKeyDlg::OnGetP()
{
// TODO: Add your control notification handler code here
UpdateData(true);
Str.Format("真的要產(chǎn)生長度為%d的素數(shù)p嗎?",m_plen);
CHECK( IDYES == MessageBox(Str,"提示",MB_YESNO | MB_ICONQUESTION) )
CHECK( BI.GetPrime(p,m_plen) )
CGfL::HalfByteToStr(buf,p.bit,p.len);
m_p = buf;
Str.Format("產(chǎn)生素數(shù)p(%d)",p.len);
SetDlgItemText(IDC_STATICP,Str);
MessageBox("成功產(chǎn)生素數(shù)p! ","提示",MB_ICONINFORMATION);
UpdateData(false);
}
void CRsaKeyDlg::OnGetQ()
{
// TODO: Add your control notification handler code here
UpdateData(true);
Str.Format("真的要產(chǎn)生長度為%d的素數(shù)q嗎?",m_qlen);
CHECK( IDYES == MessageBox(Str,"提示",MB_YESNO | MB_ICONQUESTION) )
CHECK( BI.GetPrime(q,m_qlen) )
CGfL::HalfByteToStr(buf,q.bit,q.len);
m_q = buf;
Str.Format("產(chǎn)生素數(shù)q(%d)",q.len);
SetDlgItemText(IDC_STATICQ,Str);
MessageBox("成功產(chǎn)生素數(shù)q! ","提示",MB_ICONINFORMATION);
UpdateData(false);
}
void CRsaKeyDlg::OnInputP()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CHECK( theApp.InputKeyStr(Str,300) )
CHECK_MSG( Str.GetLength()>=100, "導入失敗:素數(shù)長度小于100! " )
CHECK( BI.BuildBIFromStr(p,Str.GetBuffer(0),Str.GetLength()) )
CHECK_MSG( BI.IsPrime(p), "導入失敗:該數(shù)不是素數(shù)! " )
m_p = Str;
m_plen = p.len;
m_elen = m_plen+m_qlen;
Str.Format("產(chǎn)生素數(shù)p(%d)",p.len);
SetDlgItemText(IDC_STATICP,Str);
MessageBox("成功導入素數(shù)p! ","提示",MB_ICONINFORMATION);
UpdateData(false);
}
void CRsaKeyDlg::OnInputQ()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CHECK( theApp.InputKeyStr(Str,300) )
CHECK_MSG( Str.GetLength()>=100, "導入失敗:素數(shù)長度小于100! " )
CHECK( BI.BuildBIFromStr(q,Str.GetBuffer(0),Str.GetLength()) )
CHECK_MSG( BI.IsPrime(q) ,"導入失敗:該數(shù)不是素數(shù)! " )
m_q = Str;
m_qlen = q.len;
m_elen = m_plen+m_qlen;
Str.Format("產(chǎn)生素數(shù)q(%d)",q.len);
SetDlgItemText(IDC_STATICQ,Str);
MessageBox("成功導入素數(shù)q! ","提示",MB_ICONINFORMATION);
UpdateData(false);
}
void CRsaKeyDlg::OnGetKey()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CHECK_MSG( p.len && q.len, "請先產(chǎn)生素數(shù)p,q! " )
if( p.len != q.len )
CHECK( IDYES == MessageBox("警告:素數(shù)p,q長度不同,是否繼續(xù)?","提示",MB_YESNO | MB_ICONQUESTION) )
theApp.BeginWaitCursor();
CHECK( rsa.GetKey(p,q,e,d,n,0,0,m_elen) )
CGfL::HalfByteToStr(buf,n.bit,n.len);
m_n = buf;
Str.Format("模n (%d)",n.len);
SetDlgItemText(IDC_STATICN,Str);
CGfL::HalfByteToStr(buf,e.bit,e.len);
m_e = buf;
Str.Format("公密e(%d)",e.len);
SetDlgItemText(IDC_STATICE,Str);
CGfL::HalfByteToStr(buf,d.bit,d.len);
m_d = buf;
Str.Format("私密d(%d)",d.len);
SetDlgItemText(IDC_STATICD,Str);
theApp.EndWaitCursor();
MessageBox("成功產(chǎn)生密鑰對! ","提示",MB_ICONINFORMATION);
UpdateData(false);
}
void CRsaKeyDlg::OnOutputP()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CWindow::OutputStr(m_p);
}
void CRsaKeyDlg::OnOutputQ()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CWindow::OutputStr(m_q);
}
void CRsaKeyDlg::OnOutputN()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CWindow::OutputStr(m_n);
}
void CRsaKeyDlg::OnOutputE()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CWindow::OutputStr(m_e);
}
void CRsaKeyDlg::OnOutputD()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CWindow::OutputStr(m_d);
}
void CRsaKeyDlg::OnChangePLen()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_elen = m_plen+m_qlen;
UpdateData(false);
}
void CRsaKeyDlg::OnChangeQLen()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_elen = m_plen+m_qlen;
UpdateData(false);
}
void CRsaKeyDlg::OnChangeP()
{
// TODO: Add your control notification handler code here
UpdateData(false);
}
void CRsaKeyDlg::OnChangeQ()
{
// TODO: Add your control notification handler code here
UpdateData(false);
}
void CRsaKeyDlg::OnChangeN()
{
// TODO: Add your control notification handler code here
UpdateData(false);
}
void CRsaKeyDlg::OnChangeE()
{
// TODO: Add your control notification handler code here
UpdateData(false);
}
void CRsaKeyDlg::OnChangeD()
{
// TODO: Add your control notification handler code here
UpdateData(false);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -