⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eig.cpp

📁 这个vc++代码实现了RSA
💻 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 + -