📄 eig.cpp
字号:
// Eig.cpp : 实现文件
//
#include "stdafx.h"
#include "RSA.h"
#include "Eig.h"
#include ".\eig.h"
// Eig 对话框
IMPLEMENT_DYNAMIC(Eig, CDialog)
Eig::Eig(CWnd* pParent /*=NULL*/)
: CDialog(Eig::IDD, pParent)
, m_P(_T(""))
, m_G(_T(""))
, m_Y(_T(""))
, m_IN(_T(""))
, m_X(_T(""))
, m_A(_T(""))
, m_B(_T(""))
, m_len(0)
, m_T(_T(""))
{
CTime t = CTime::GetCurrentTime();
seed=t.GetSecond();
srand(seed);
}
Eig::~Eig()
{
}
void Eig::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_P, m_P);
DDX_Text(pDX, IDC_G, m_G);
DDX_Text(pDX, IDC_Y, m_Y);
DDX_Text(pDX, IDC_IN, m_IN);
DDX_Text(pDX, IDC_X, m_X);
DDX_Text(pDX, IDC_A, m_A);
DDX_Text(pDX, IDC_OUT, m_B);
DDX_CBIndex(pDX, IDC_COMBO1, m_len);
DDX_Text(pDX, IDC_EDIT1, m_T);
}
BEGIN_MESSAGE_MAP(Eig, CDialog)
ON_BN_CLICKED(IDC_GETCODEKEY, OnBnClickedGetcodekey)
ON_BN_CLICKED(IDC_ENCRYPT, OnBnClickedEncrypt)
ON_BN_CLICKED(IDC_DECRYPTION, OnBnClickedDecryption)
END_MESSAGE_MAP()
// Eig 消息处理程序
void Eig::OnBnClickedGetcodekey()
{
// TODO: 在此添加控件通知处理程序代码
ready=1;
UpdateData(TRUE);
int len=2;
for(int i=0;i<m_len;i++){len*=2;}
CTime t0=CTime::GetCurrentTime();
P.Mov(0);
G.Mov(0);
X.Mov(0);
E.Mov(0);
Y.Mov(0);
K.Mov(0);
P.GetPrime(len);
G.GetPrime(len);
X.GetPrime(len);
K.GetPrime(len+1);
if(P.Cmp(G)<0||P.Cmp(X)<0)
{
if(G.Cmp(X)>=0)
{ E.Mov(P);
P.Mov(G);
G.Mov(E);
}
else
{ E.Mov(P);
P.Mov(X);
X.Mov(E);
}
}
CTime t1=CTime::GetCurrentTime();
CTimeSpan t=t1-t0;
m_T.Format("%d",t.GetTotalSeconds());
m_T+=" 秒";
P.Put(m_P);
G.Put(m_G);
X.Put(m_X);
Y.Mov(G.RsaTrans(X,P));
Y.Put(m_Y);
UpdateData(FALSE);
}
void Eig::OnBnClickedEncrypt()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
int len=2;
for(int i=0;i<m_len;i++){len*=2;}
if(m_P.GetLength()==0||m_X.GetLength()==0||m_Y.GetLength()==0||m_G.GetLength()==0)
{
m_IN="请先点击获取随机大数密钥";
UpdateData(FALSE);
return;
}
else if(m_IN.GetLength()==0||m_IN=="请先点击获取随机大数密钥")
{
m_IN="请输入需要加密的文件";
UpdateData(FALSE);
return;
}
if(m_IN.GetLength()>256)
{
m_B=_T("N不得大于256位");
UpdateData(FALSE);
return;
}
if(M.Cmp(P)!=-1)
{
m_B=_T("M不得大于P");
UpdateData(FALSE);
return;
}
M.Get(m_IN);
P.Get(m_P);
G.Get(m_G);
Y.Get(m_Y);
for(int i=0;i<m_IN.GetLength();i++)
{
if((m_IN[i]<'0')||
((m_IN[i]>'9')&&(m_IN[i]<'A'))||
((m_IN[i]>'F')&&(m_IN[i]<'a'))||
(m_IN[i]>'f')&& m_IN!="请输入需要加密的文件")
{
m_B=_T("待加密数据必须为0-9或A-F或a-f组成的整数");
UpdateData(FALSE);
return;
}
}
A.Mov(G.RsaTrans(K,P));
A.Put(m_A);
B.Mov(Y.RsaTrans(K,P));
M.Mov(M.Mod(P));
B.Mov(B.Mul(M));
B.Mov(B.Mod(P));
B.Put(m_B);
UpdateData(FALSE);
}
void Eig::OnBnClickedDecryption()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if((ready==0)||(M.m_ulValue[0]==0))
{
m_B="请先加密";
UpdateData(FALSE);
return;
}
A.Get(m_A);
X.Get(m_X);
P.Get(m_P);
B.Get(m_B);
L.Mov(P);
L.m_ulValue[0]--;
L.Mov(L.Sub(X));
A.Mov(A.RsaTrans(L,P));
B.Mov(B.Mul(A));
B.Mov(B.Mod(P));
B.Put(m_B);
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -