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

📄 demo.cpp

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