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

📄 desencrptiondlg.cpp

📁 DES加密程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// DESEncrptionDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DESEncrption.h"
#include "DESEncrptionDlg.h"
#include "math.h"
#include "time.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};



CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDESEncrptionDlg dialog

CDESEncrptionDlg::CDESEncrptionDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDESEncrptionDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDESEncrptionDlg)
	m_InputVar = _T("");
	m_Lnew = _T("");
	m_Rnew = _T("");
	m_S = _T("");
	m_D = _T("");
	m_C = _T("");
	m_ER = _T("");
	m_F = _T("");
	m_K = _T("");
	m_Lold = _T("");
	m_Rold = _T("");
	m_Round = _T("");
	m_XOR = _T("");
	m_OutputVar = _T("");
	m_ResultEdit = _T("");
	m_finalResult = _T("");
	m_edit1 = _T("");
	m_edit2 = _T("");
	m_edit3 = _T("");
	m_speed = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDESEncrptionDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDESEncrptionDlg)
	DDX_Control(pDX, LFXORButton, m_lfxorbutton);
	DDX_Control(pDX, PButton, m_pbutton);
	DDX_Control(pDX, SButton, m_sbutton);
	DDX_Control(pDX, XORButton, m_xorbutton);
	DDX_Control(pDX, ERButton, m_erbutton);
	DDX_Control(pDX, PC2Button, m_pc2button);
	DDX_Control(pDX, LeftButton, m_leftbutton);
	DDX_Control(pDX, IPButton, m_ipbutton);
	DDX_Control(pDX, K, Ksign);
	DDX_Control(pDX, RO, ROsign);
	DDX_Control(pDX, RN, RNsign);
	DDX_Control(pDX, LO, LOsign);
	DDX_Control(pDX, LN, LNsign);
	DDX_Control(pDX, D, Dsign);
	DDX_Control(pDX, C, Csign);
	DDX_Control(pDX, nextRound, m_nextRound);
	DDX_Text(pDX, InputEdit, m_InputVar);
	DDX_Text(pDX, EditL, m_Lnew);
	DDX_Text(pDX, EditR, m_Rnew);
	DDX_Text(pDX, EditS, m_S);
	DDX_Text(pDX, EditD, m_D);
	DDX_Text(pDX, EditC, m_C);
	DDX_Text(pDX, EREdit, m_ER);
	DDX_Text(pDX, FEdit, m_F);
	DDX_Text(pDX, KEdit, m_K);
	DDX_Text(pDX, LEdit, m_Lold);
	DDX_Text(pDX, REdit, m_Rold);
	DDX_Text(pDX, RoundEdit, m_Round);
	DDX_Text(pDX, XOREdit, m_XOR);
	DDX_Text(pDX, KeyEdit, m_OutputVar);
	DDX_Text(pDX, ResultEdit, m_ResultEdit);
	DDX_Text(pDX, finalResultEdit, m_finalResult);
	DDX_Text(pDX, IDC_EDIT1, m_edit1);
	DDX_Text(pDX, IDC_EDIT2, m_edit2);
	DDX_Text(pDX, IDC_EDIT3, m_edit3);
	DDX_Text(pDX, speedText, m_speed);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDESEncrptionDlg, CDialog)
	//{{AFX_MSG_MAP(CDESEncrptionDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_EN_CHANGE(InputEdit, OnChangeInputEdit)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_EN_CHANGE(KeyEdit, OnChangeKeyEdit)
	ON_BN_CLICKED(IPButton, OnIPButton)
	ON_BN_CLICKED(LeftButton, OnLeftButton)
	ON_BN_CLICKED(PC2Button, OnPC2Button)
	ON_BN_CLICKED(ERButton, OnERButton)
	ON_BN_CLICKED(XORButton, OnXORButton)
	ON_BN_CLICKED(SButton, OnSButton)
	ON_BN_CLICKED(PButton, OnPButton)
	ON_BN_CLICKED(LFXORButton, OnLFXORButton)
	ON_BN_CLICKED(nextRound, OnnextRound)
	ON_BN_CLICKED(LookForCode, OnLookForCode)
	ON_BN_CLICKED(DecrptionButton, OnDecrptionButton)
	ON_BN_CLICKED(EncrptionButton, OnEncrptionButton)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDESEncrptionDlg message handlers

BOOL CDESEncrptionDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	DESRound=1;
	RNsign.SetReadOnly(true);
	ROsign.SetReadOnly(true);
	LNsign.SetReadOnly(true);
	LOsign.SetReadOnly(true);
	Csign.SetReadOnly(true);
	Dsign.SetReadOnly(true);
	Ksign.SetReadOnly(true);
	ROsign.SetWindowText("R0");
	LOsign.SetWindowText("L0");
	Csign.SetWindowText("C1");
	Dsign.SetWindowText("D1");
	Ksign.SetWindowText("K1");
	LNsign.SetWindowText("L1");
	RNsign.SetWindowText("R1");

	m_ipbutton.EnableWindow(true);
	m_leftbutton.EnableWindow(false);
	m_pc2button.EnableWindow(false);
	m_erbutton.EnableWindow(false);
	m_xorbutton.EnableWindow(false);
	m_sbutton.EnableWindow(false);
	m_pbutton.EnableWindow(false);
	m_lfxorbutton.EnableWindow(false);
	//初始化IP数组

	/*CFile inFile;
	inFile.Open("C:/Documents and Settings/BENQ/桌面/作业/信息系统安全/IP.txt",CFile::modeRead);
	int numOfSource=inFile.GetLength();
	int i,j=0;
	unsigned char c;
	CString temp;
	for(i=0;i<numOfSource;i++)
	{
		temp="";
		do
		{
			inFile.Read(&c,1);
			temp+=c;
			i++;
		}while(c!=' ');
		ip[j]=atoi(temp);
		j++;
	}*/
	
	/*if(ip[46]==11)
		MessageBox("","",1);*/
	//inFile.Close();
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDESEncrptionDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CDESEncrptionDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CDESEncrptionDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

int ip[64]={58,50,42,34,26,18,10,2,
			60,52,44,36,28,20,12,4,
			62,54,46,38,30,22,14,6,
			64,56,48,40,32,24,16,8,
			57,49,41,33,25,17,9,1,
			59,51,43,35,27,19,11,3,
			61,53,45,37,29,21,13,5,
			63,55,47,39,31,23,15,7};
int ipres[64]={
40, 8, 48, 16, 56, 24, 64, 32,
39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30,
37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28,
35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26,
33, 1, 41, 9, 49, 17, 57, 25
};

int E[48]={
			32,1,2,3,4,5,
			4, 5, 6, 7, 8, 9,
			8, 9, 10, 11, 12, 13,
			12, 13, 14, 15, 16,17,
			16, 17, 18, 19, 20, 21,
			20, 21, 22, 23, 24, 25,
			24, 25, 26, 27, 28, 29,
			28, 29, 30, 31, 32, 1
};

int PC1[56]={
			57, 49, 41, 33, 25, 17, 9,
			1, 58 ,50, 42, 34, 26, 18,
			10, 2, 59, 51, 43, 35, 27,
			19, 11, 3, 60, 52, 44, 36,
			63, 55, 47, 39, 31, 23, 15,
			7, 62, 54, 46, 38, 30, 22,
			14, 6, 61, 53, 45, 37, 29,
			21, 13, 5, 28, 20, 12, 4
};

int PC2[48]={
			14, 17, 11, 24, 1, 5,
			3, 28, 15, 6, 21, 10,
			23, 19, 12, 4, 26, 8,
			16, 7, 27, 20, 13, 2,
			41, 52, 31, 37, 47, 55,
			30, 40, 51, 45, 33, 48,
			44, 49, 39, 56, 34, 53,
			46, 42, 50, 36, 29, 32
};
int S[8][64]={
{
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13
},
{
15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9
},
{
10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12
},
{
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2,14
},
{
2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
14, 11, 2,12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3
},
{
12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13
},
{
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0,5,9, 2,
6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12
},
{
13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11
}
};
int P[32]={
16, 7, 20, 21,
29, 12, 28, 17,
1, 15, 23, 26,
5, 18, 31, 10,
2, 8, 24, 14,
32, 27, 3, 9,
19, 13, 30, 6,
22, 11, 4, 25
};

int iter[16][2]={
1, 1,
2, 1,
3, 2,
4, 2,
5, 2,
6, 2,
7, 2,
8, 2,
9, 1,
10, 2,
11, 2,
12, 2,
13, 2,
14, 2,
15, 2,
16, 1
};

CString Keys[16];

CString zLold;
CString zRold;
CString zC;
CString zD;
CString zK;
CString zER;
CString zXOR;
CString zS;
CString zF;
CString zLnew;
CString zRnew;
CString zr;
CString succ;

bool bKeys[16][48];
bool bLold[32];
bool bRold[32];
bool bK[48];
bool bER[48];
bool bXOR[48];
bool bS[32];
bool bF[32];
bool bLnew[32];
bool bRnew[32];
bool b64dup[56];  // hold raw K every round


bool bool64[64];//=bool[64];
bool bool64temp[64];
bool boolLeftMove[56];
bool bCD[56];         // put CD in each round

unsigned char inputTresult[8]={0,0,0,0,0,0,0,0};     //存放最开始的输入的64位转换结果的数组
unsigned char test[8]={'a','b','c','d','1','2','3','4'};
unsigned char left[4];      //L
unsigned char right[4];     //R
unsigned char KEY[8]={'a','b','c','d','1','2','3','4'};
unsigned char CD[7]={0,0,0,0,0,0,0};


void CDESEncrptionDlg::OnChangeInputEdit() //输入原始数据
{
	UpdateData(true);	
}

void CDESEncrptionDlg::OnChangeOutputEdit() //输出转换数据
{
	m_OutputVar=m_InputVar;
	//UpdateData(true);
}

void CDESEncrptionDlg::OnButton1() //转换按钮
{
	CString sFilter="所有文件 (*.*) |*.*||"; 
	CFileDialog dlg(true,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL); //定制文件对话框 
	if(dlg.DoModal()==IDOK)//打开对话框 
	{ 
		CString fName = dlg.GetPathName();//获得所选文件名 
		m_edit1=fName;
		m_edit2=m_edit1+"_enc.txt";
		m_edit3=m_edit2+"_enc.txt";
		UpdateData(false);
		WinExec(fName, SW_SHOW);//运行该文件 
	}
}

void CDESEncrptionDlg::OnButton2() 
{
	CString sFilter="所有文件 (*.*) |*.*||"; 
	CFileDialog dlg(true,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL); //定制文件对话框 
	if(dlg.DoModal()==IDOK)//打开对话框 
	{ 
		CString m_edit2 = dlg.GetPathName();//获得所选文件名 
		UpdateData(false);
		WinExec(m_edit2, SW_SHOW);//运行该文件 
	}
}

void CDESEncrptionDlg::OnButton3() 
{
	CString sFilter="所有文件 (*.*) |*.*||"; 
	CFileDialog dlg(true,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL); //定制文件对话框 
	if(dlg.DoModal()==IDOK)//打开对话框 
	{ 
		CString m_edit3 = dlg.GetPathName();//获得所选文件名 
		UpdateData(false);
		WinExec(m_edit3, SW_SHOW);//运行该文件 
	}	
}

void CDESEncrptionDlg::Tran64(int array[],unsigned char source[8],unsigned char result[8],int N) 

{
	
}

void CDESEncrptionDlg::getL0R0(unsigned char c[8])
{

}


void CDESEncrptionDlg::getC0D0(int array[],unsigned char source[8],unsigned char result[7],int N)
{
	
}

void CDESEncrptionDlg::LeftMove(bool b[],int l)
{
	
	CString result="";
	l=l%28;	                //at most 28 bits


	for(int i=0;i<56;i++)
	{
		boolLeftMove[i]=b[i];
	}
	for(i=0;i<l;i++)
	{
		b[28-l+i]=boolLeftMove[i];
		b[56-l+i]=boolLeftMove[i+28];
	}
	for(i=0;i<28-l;i++)
	{
		b[i]=boolLeftMove[i+l];
		b[i+28]=boolLeftMove[i+28+l];
	}

}

void CDESEncrptionDlg::DecimalToBinary(CString strDecimal,bool boolArray[],int length)  //把CString以整数的形式转化为0 1串行的CString
{
	CString strBinary = "";
	//unsigned char temp[8];
	unsigned char ruler=128;
	int result;
	for(int i=0;i<strDecimal.GetLength();i++)
	{
		ruler=128;

		unsigned char c=strDecimal.GetAt(i);
		int nDecimal = c; 
		//memset(&temp,0,8);

		for(int j=0;j<8;j++)
		{

⌨️ 快捷键说明

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