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

📄 tooldlg.cpp

📁 RSA加解密算法源代码
💻 CPP
字号:
#include "stdafx.h"
#include "RsaKit.h"
#include "ToolDlg.h"

CToolDlg::CToolDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CToolDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CToolDlg)
	m_A = _T("");
	m_B = _T("");
	m_C = _T("");
	//}}AFX_DATA_INIT
}


void CToolDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CToolDlg)
	DDX_Text(pDX, IDC_A, m_A);
	DDX_Text(pDX, IDC_B, m_B);
	DDX_Text(pDX, IDC_C, m_C);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CToolDlg, CDialog)
	//{{AFX_MSG_MAP(CToolDlg)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_BN_CLICKED(IDC_BUTTON_DEC, OnButtonDec)
	ON_BN_CLICKED(IDC_BUTTON_DIV, OnButtonDiv)
	ON_BN_CLICKED(IDC_BUTTON_EUC, OnButtonEuc)
	ON_BN_CLICKED(IDC_BUTTON_EXP, OnButtonExp)
	ON_BN_CLICKED(IDC_BUTTON_HEX, OnButtonHex)
	ON_BN_CLICKED(IDC_BUTTON_MOD, OnButtonMod)
	ON_BN_CLICKED(IDC_BUTTON_MUL, OnButtonMul)
	ON_BN_CLICKED(IDC_BUTTON_SUB, OnButtonSub)
	ON_BN_CLICKED(IDC_BUTTON_SQRT, OnButtonSqrt)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CToolDlg::OnButtonAdd() 
{
    UpdateData(TRUE);
	if((m_A.GetLength()>380)||(m_B.GetLength()>380))
	{
		m_C=_T("A、B不得大于380位");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
    A.Get(m_A,DEC);
	B.Get(m_B,DEC);
	C.Mov(A.Add(B));
	C.Put(m_C,DEC);
	UpdateData(FALSE);
    return;	
}

void CToolDlg::OnButtonSub() 
{
    UpdateData(TRUE);
	if((m_A.GetLength()>380)||(m_B.GetLength()>380))
	{
		m_C=_T("A、B不得大于380位");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	A.Get(m_A,DEC);
	B.Get(m_B,DEC);
	if(A.Cmp(B)>=0)
	{
		C.Mov(A.Sub(B));
		C.Put(m_C,DEC);
	}
	else
	{
		C.Mov(B.Sub(A));
		C.Put(m_C,DEC);
		m_C.Insert(0,'-');
	}
	UpdateData(FALSE);
    return;	
}

void CToolDlg::OnButtonMul() 
{
    UpdateData(TRUE);
	if((m_A.GetLength()+m_B.GetLength())>380)
	{
		m_C=_T("A、B位数之和不得大于380");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	A.Get(m_A,DEC);
	B.Get(m_B,DEC);	
	C.Mov(A.Mul(B));
	C.Put(m_C,DEC);
	UpdateData(FALSE);
    return;	
}

void CToolDlg::OnButtonDiv() 
{
    UpdateData(TRUE);
	if((m_A.GetLength()>380)||(m_B.GetLength()>380))
	{
		m_C=_T("A、B不得大于380位");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	if((m_B=="0")||(m_B==""))
	{
		m_C=_T("B不得为0");
		UpdateData(FALSE);
		return; 
	}
	A.Get(m_A,DEC);
	B.Get(m_B,DEC);	
	C.Mov(A.Div(B));
	C.Put(m_C,DEC);
	UpdateData(FALSE);
    return;	
}

void CToolDlg::OnButtonMod() 
{
    UpdateData(TRUE);
	if((m_A.GetLength()>310)||(m_B.GetLength()>310))
	{
		m_C=_T("A、B不得大于380位");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	if((m_B=="0")||(m_B==""))
	{
		m_C=_T("B不得为0");
		UpdateData(FALSE);
		return; 
	}
	A.Get(m_A,DEC);
	B.Get(m_B,DEC);	
	C.Mov(A.Mod(B));
	C.Put(m_C,DEC);
	UpdateData(FALSE);
    return;		
}

void CToolDlg::OnButtonExp() 
{
    UpdateData(TRUE);
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	if((m_B=="")||(m_B=="0"))
	{
		if((m_A=="")||(m_A=="0"))m_C="0的0次幂不存在";
		else m_C="1";
		UpdateData(FALSE);
		return;
	}
	A.Get(m_A,DEC);
	B.Get(m_B,DEC);
    int k;
	unsigned long num;
	k=B.m_nLength*32-32;
	num=B.m_ulValue[B.m_nLength-1];
	while(num){num=num>>1;k++;}
	C.Mov(A);
	for(i=k-2;i>=0;i--)
	{
		if(C.m_nLength<20)C.Mov(C.Mul(C));
		else{m_C=_T("对不起,结果太大");UpdateData(FALSE);return;}
		if((B.m_ulValue[i>>5]>>(i&31))&1)
		{
			if(C.m_nLength+A.m_nLength<40)C.Mov(C.Mul(A));
			else{m_C=_T("对不起,结果太大");UpdateData(FALSE);return;}
		}
	}
	C.Put(m_C,DEC);
	UpdateData(FALSE);
    return;		
}

void CToolDlg::OnButtonSqrt() 
{
	UpdateData(TRUE);
	if((m_A.GetLength()>380)||(m_B.GetLength()>380))
	{
		m_C=_T("A、B不得大于380位");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	A.Get(m_A,DEC);
	A.Mov(A.Sqrt());
	A.Put(m_C,DEC);
	UpdateData(FALSE);
    return;
}

void CToolDlg::OnButtonEuc() 
{
    UpdateData(TRUE);
	if((m_A.GetLength()>380)||(m_B.GetLength()>380))
	{
		m_C=_T("A、B不得大于380位");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	A.Get(m_A,DEC);
	B.Get(m_B,DEC);	
	if(A.Cmp(B)<=0)
	{
		m_C=_T("B必须小于A");
		UpdateData(FALSE);
		return;
	}
	C.Mov(B.ModInv(A));
	C.Put(m_C,DEC);
	UpdateData(FALSE);
    return;		
}

void CToolDlg::OnButtonDec() 
{
    UpdateData(TRUE);
	if(m_A.GetLength()>320)
	{
		m_C=_T("A不得大于320位");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||
		   ((m_A[i]>'9')&&(m_A[i]<'A'))||
		   ((m_A[i]>'F')&&(m_A[i]<'a'))||
		   (m_A[i]>'f'))
		{
			m_C=_T("A必须为0-9或A-F或a-f组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	A.Get(m_A,HEX);
	A.Put(m_C,DEC);
	UpdateData(FALSE);
    return;		
}

void CToolDlg::OnButtonHex() 
{
    UpdateData(TRUE);
	if(m_A.GetLength()>380)
	{
		m_C=_T("A不得大于380位");
		UpdateData(FALSE);
		return;
	}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	A.Get(m_A,DEC);
	A.Put(m_C,HEX);
	UpdateData(FALSE);
    return;		
}

/*
void CToolDlg::OnButtonFac() 
{
    UpdateData(TRUE);
	if(m_A.GetLength()>40){m_C=_T("A不得大于40位");UpdateData(FALSE);return;}
	for(int i=0;i<m_A.GetLength();i++)
	{
		if((m_A[i]<'0')||(m_A[i]>'9'))
		{
			m_C=_T("A必须为0-9组成的整数");
			UpdateData(FALSE);
			return;
		}
	}
	if((m_A=="")||(m_A=="0")||(m_A=="1"))
	{
		m_C=_T("0和1不能分解质因数");
		UpdateData(FALSE);
		return;
	}
	A.Get(m_A,DEC);
	i=A.TestPrime();
	if(i>1)
	{
		m_C.Format("%d",i);
		m_C+=_T("是A的质因数");
		UpdateData(FALSE);
		return;
	}
	if(i==0)
	{	m_C=_T("A 99.99%是质数");
	    UpdateData(FALSE);
	    return;
	}
	CBigInt B,I;
	B.Mov(4003);
	while(1)
	{
		I.Mov(A.Mod(B));
		if((I.m_nLength==1)&&(I.m_ulValue[0]==0))break;
		B.Mov(B.Add(2));
	}
	B.Put(m_C,DEC);
	m_C+=_T("是A的质因数");
	UpdateData(FALSE);
	return;
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -