📄 demo.cpp
字号:
// Demo.cpp : 实现文件
//
#include "stdafx.h"
#include "RSA.h"
#include "Demo.h"
#include ".\demo.h"
// CDemo 对话框
IMPLEMENT_DYNAMIC(CDemo, CDialog)
CDemo::CDemo(CWnd* pParent /*=NULL*/)
: CDialog(CDemo::IDD, pParent)
, m_N(_T(""))
, m_E(_T(""))
, m_M(_T(""))
, m_D(_T(""))
, m_d(_T(""))
,m_len(0)
, m_NN(0)
, m_eN(0)
, m_MN(0)
{
CTime t = CTime::GetCurrentTime();
seed=t.GetSecond();
srand(seed);
}
CDemo::~CDemo()
{
}
void CDemo::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_N, m_N);
DDX_Text(pDX, IDC_E, m_E);
DDX_Text(pDX, IDC_M, m_M);
DDX_Text(pDX, IDC_D, m_D);
DDX_Text(pDX, IDC_DD, m_d);
DDX_CBIndex(pDX, IDC_COMBO1, m_len);
DDX_Text(pDX, IDC_EDIT1, m_NN);
DDX_Text(pDX, IDC_EDIT2, m_eN);
DDX_Text(pDX, IDC_EDIT3, m_MN);
}
BEGIN_MESSAGE_MAP(CDemo, CDialog)
ON_BN_CLICKED(IDC_GETPRIMEKEY, OnBnClickedGetprimekey)
ON_BN_CLICKED(IDC_ENCRYPT, OnBnClickedEncrypt)
ON_BN_CLICKED(IDC_DENCRYPTION, OnBnClickedDencryption)
END_MESSAGE_MAP()
// CDemo 消息处理程序
void CDemo::OnBnClickedGetprimekey()//获得公钥及私玥
{
ready=1;
UpdateData(TRUE);
int len=2;
for(int i=0;i<m_len;i++){len*=2;}
CTime t0=CTime::GetCurrentTime();
P.Mov(0);
Q.Mov(0);
N.Mov(0);
E.Mov(0);
P.GetPrime(len);
Q.GetPrime(len);
N.Mov(P.Mul(Q));
N.Put(m_N);
m_NN=m_N.GetLength();
P.m_ulValue[0]--;
Q.m_ulValue[0]--;
P.Mov(P.Mul(Q));
D.Mov(0x10001);
m_d="0x10001";
E.Mov(D.Euc(P));
E.Put(m_E);
m_eN=m_E.GetLength();
CTime t1=CTime::GetCurrentTime();
CTimeSpan t=t1-t0;
m_D.Format("%d",t.GetTotalSeconds());
m_D+=" 秒";
Q.m_ulValue[0]=0;
UpdateData(FALSE);
}
void CDemo::OnBnClickedEncrypt()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if(m_N.GetLength()==0||m_E.GetLength()==0||m_d.GetLength()==0)
{
m_M="请先点击获取随机大数";
UpdateData(FALSE);
return;
}
else if(m_M.GetLength()==0||m_M=="请先点击获取随机大数")
{
m_M="请输入需要加密的文件";
UpdateData(FALSE);
return;
}
if(m_M.GetLength()>m_N.GetLength())
{
m_D="待加密数必须小于N";
UpdateData(FALSE);
return;
}
if(m_M.GetLength()>256)
{
m_D=_T("N不得大于256位");
UpdateData(FALSE);
return;
}
m_MN=m_M.GetLength();
P.Get(m_M);
for(int i=0;i<m_M.GetLength();i++)
{
if((m_M[i]<'0')||
((m_M[i]>'9')&&(m_M[i]<'A'))||
((m_M[i]>'F')&&(m_M[i]<'a'))||
(m_M[i]>'f'))
{
m_D=_T("待加密数据必须为0-9或A-F或a-f组成的整数");
UpdateData(FALSE);
return;
}
}
Q.Mov(P.RsaTrans(E,N));
Q.Put(m_D);
UpdateData(FALSE);
}
void CDemo::OnBnClickedDencryption()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if((ready==0)||(Q.m_ulValue[0]==0))
{
m_D="请先加密";
UpdateData(FALSE);
return;
}
Q.Get(m_D);
P.Mov(Q.RsaTrans(D,N));
P.Put(m_D);
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -