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

📄 lass_enc.cpp

📁 vc++实现des算法
💻 CPP
字号:
// lass_Enc.cpp : implementation file
//

#include "stdafx.h"
#include "sec.h"
#include "lass_Enc.h"
#include "diaobiao_function.h"
#include "playfair_function.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int find_node(char a);
/////////////////////////////////////////////////////////////////////////////
// Class_Enc dialog


Class_Enc::Class_Enc(CWnd* pParent /*=NULL*/)
	: CDialog(Class_Enc::IDD, pParent)
{
	//{{AFX_DATA_INIT(Class_Enc)
	m_edit3 = _T("");
	m_radio = -1;
	m_edit2 = _T("");
	m_edit1 = _T("");
	m_edit4 = _T("");
	//}}AFX_DATA_INIT
}


void Class_Enc::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Class_Enc)
	DDX_Text(pDX, IDC_EDIT3, m_edit3);
	DDX_Radio(pDX, IDC_RADIO1, m_radio);
	DDX_Text(pDX, IDC_EDIT2, m_edit2);
	DDX_Text(pDX, IDC_EDIT1, m_edit1);
	DDX_Text(pDX, IDC_EDIT4, m_edit4);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(Class_Enc, CDialog)
	//{{AFX_MSG_MAP(Class_Enc)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2)
	ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Class_Enc message handlers

void Class_Enc::OnOK() 
{
	UpdateData(1);
	switch(m_radio)
	{
	    case 0 : Class_Enc::kaisai();break;
		case 1 : Class_Enc::danbiao();break;
		case 2 : Class_Enc::weijiliya();break;
		case 3 : Class_Enc::fulaifue();break;
	}
	UpdateData(0);
	//CDialog::OnOK();
}
void Class_Enc::kaisai()                            //凯撒
{

	char tmp[27]="abcdefghijklmnopqrstuvwxyz";
	char tmp1,tmp2;
	int i,j,k=0;
	// TODO: Add extra validation here
	UpdateData(1);
		for(i=0;i<m_edit2.GetLength();i++)
		{
			tmp2=m_edit2.GetAt(i);
			k=k*10+((int)tmp2-48);
		};
		for(i=0;i<m_edit1.GetLength();i++)
		{
			tmp1=m_edit1.GetAt(i);
			for(j=0;j<27;j++)
			{
				if(tmp[j]==tmp1) break;
			}
			tmp1=tmp[(j+k)%26];
			m_edit3+=tmp1;
		}
	UpdateData(0);
}



void Class_Enc::weijiliya()                 //维吉利亚
{
	char tmp[27]="abcdefghijklmnopqrstuvwxyz";
	char tmp1,tmp2,tmp3;
	int i,j,x,y;
	// TODO: Add extra validation here
	UpdateData(1);
		tmp2=m_edit2.GetAt(0);
		for(i=0;i<m_edit1.GetLength();i++)
		{
			tmp1=m_edit1.GetAt(i);
			for(j=0;j<27;j++)
			{
				if(tmp[j]==tmp1)  break;
			}
			x=j;
			tmp2=m_edit2.GetAt(i%m_edit2.GetLength());
			for(j=0;j<27;j++)
			{
				if(tmp[j]==tmp2)  break;
			}
			y=j;
			tmp3=tmp[(x+y)%26];
			m_edit3+=tmp3;
		}
	UpdateData(0);
}

              //单表置换


void Class_Enc::danbiao()
{
	char str1[1000]="",str2[1000]="",str3[1000]="";
	int m,n;
	int i,j=0,k,l;
UpdateData(1);
	for(i=0;i<m_edit1.GetLength();i++)
		{
			if(m_edit1.GetAt(i)==' ') continue;
			str1[j]=m_edit1.GetAt(i);j++;
		}
	
	j=0;
    for(i=0;i<m_edit2.GetLength();i++)
		{
			if(m_edit2.GetAt(i)==' ') continue;
			str2[j]=m_edit2.GetAt(i);j++;
		}
secr(str2);
for(i=0;sec[i]!='\0';i++)
	m_edit4+=sec[i];                      //      输出密码表


	for(j=0;str1[j]!='\0';j++)           //加密
	{
		k=find_node(str1[j]);
		str3[j]=sec[k];
	}

	for(j=0;str3[j]!='\0';j++)                       //输出密文
		m_edit3+=str3[j];
	for(i=0;sec[i]!='\0';i++) sec[i]='\0';
UpdateData(0);
}                                               //单表置换结束


void Class_Enc::fulaifue()                     //普费莱厄
{
	char str1[1000]="",str2[27]="",str3[1000]="";
	int i,j=0,k,m;
	int x1,x2,y1,y2;
UpdateData(1);

	for(i=0;i<m_edit1.GetLength();i++)
		{
			if(m_edit1.GetAt(i)==' ') continue;
			str1[j]=m_edit1.GetAt(i);j++;
		}
	j=0;
    for(i=0;i<m_edit2.GetLength();i++)
		{
			if(m_edit2.GetAt(i)==' ') continue;
			str2[j]=m_edit2.GetAt(i);j++;
		}


secr_playfair(str2);

if(strlen(str1)%2!=0)	{for(i=0;str1[i]!='\0';i++);	str1[i]='q';}
for(i=0;str1[i]!='\0';i++)	{if(str1[i]=='j') str1[i]='i';}

for(i=0;sec_playfair[i]!='\0';i++)
	{
		m_edit4+=sec_playfair[i];                   //      输出密码表
	}  
m=0;                                         
for(i=0;i<5;i++)
	for(j=0;j<5;j++)
		{
			sec_matrix[i][j]=sec_playfair[m];
			m++;
		}
for(j=0;str1[j]!='\0';j+=2)
	{
		find_playfairnode(str1[j]);
		x1=x;y1=y;
		find_playfairnode(str1[j+1]);
		x2=x;y2=y;
		if(x1==x2)                               //同一行
		{
			str3[j]=sec_matrix[x1][(y1+1)%5];str3[j+1]=sec_matrix[x1][(y2+1)%5];
		}
		else if(y1==y2)                         //同一列
		{
			str3[j]=sec_matrix[(x1+1)%5][y1];str3[j+1]=sec_matrix[(x2+1)%5][y1];
		}
		else                                     //对角
		{
			str3[j]=sec_matrix[x1][y2]; str3[j+1]=sec_matrix[x2][y1];
		}
		m_edit3+=str3[j];m_edit3+=str3[j+1];
	}
for(i=0;sec_playfair[i]!='\0';i++)	sec_playfair[i]='\0';
for(i=0;i<5;i++)
	for(j=0;j<5;j++)
		sec_matrix[i][j]='\0';

UpdateData(0);
}

void Class_Enc::OnButton1() 
{
UpdateData(1);
	m_edit1.Empty();
	m_edit2.Empty();
	m_edit3.Empty();
	m_edit4.Empty();
UpdateData(0);	
}

void Class_Enc::OnChangeEdit2() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	char tmp;
	int i,j;
UpdateData(1);
	if(m_radio==0)
	{
		
		for(j=0;j<m_edit2.GetLength();j++)
		{
			tmp=m_edit2.GetAt(j);
			i=(int)tmp;
		
			if(i<48 || i>57)
			{
				MessageBox("输入的不是数字请输和数字",NULL,MB_OK);
				m_edit2.Empty();
				break;
			}	
		
		}

	}
	if(m_radio==1 || m_radio==3)
	{
		
		for(j=0;j<m_edit2.GetLength();j++)
		{
			tmp=m_edit2.GetAt(j);
			i=(int)tmp;
			if(i!=32)
			if(i<97 || i>122)
			{
				MessageBox("有数字、大写字母",NULL,MB_OK);
				m_edit2.Empty();
				break;
			}	
		
		}

	}
	if(m_radio==2)
	{
		
		for(j=0;j<m_edit2.GetLength();j++)
		{
			tmp=m_edit2.GetAt(j);
			i=(int)tmp;
			if(tmp==' ' || i<97 || i>122)
			{
				MessageBox("有空格",NULL,MB_OK);
				m_edit2.Empty();
				break;
			}	
		
		}

	}
	UpdateData(0);
}

void Class_Enc::OnChangeEdit1() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	char tmp;
	int i,j;
UpdateData(1);
	if(m_radio==0 || m_radio==2)
	{
		
		for(j=0;j<m_edit1.GetLength();j++)
		{
			tmp=m_edit1.GetAt(j);
			i=(int)tmp;
			if(tmp==' ' || i<97 || i>122)
			{
				MessageBox("有空格、数字、大写字母",NULL,MB_OK);
				m_edit1.Empty();
				break;
			}	
		
		}

	}
	if(m_radio==1 || m_radio==3)
	{
		
		for(j=0;j<m_edit1.GetLength();j++)
		{
			tmp=m_edit1.GetAt(j);
			i=(int)tmp;
			if(i!=32)
			if(i<97 || i>122)
			{
				MessageBox("有数字、大写字母",NULL,MB_OK);
				m_edit1.Empty();
				break;
			}	
		
		}

	}
	UpdateData(0);
}

⌨️ 快捷键说明

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