📄 desencrptiondlg.cpp
字号:
// 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 + -