📄 desdlg.cpp
字号:
// DESDlg.cpp : implementation file
//
#include "stdafx.h"
#include "DES.h"
#include "DESDlg.h"
#include <io.h>
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDESDlg dialog
CDESDlg::CDESDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDESDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDESDlg)
m_nRadio = 0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CDESDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDESDlg)
DDX_Control(pDX, IDC_EDIT_SFile, m_sfile);
DDX_Control(pDX, IDC_EDIT_RFile, m_rfile);
DDX_Control(pDX, IDC_EDIT_Plain, m_plain);
DDX_Control(pDX, IDC_EDIT_Key, m_key);
DDX_Control(pDX, IDC_EDIT_Cipher, m_cipher);
DDX_Control(pDX, IDC_BUTTON_SB, m_sb);
DDX_Control(pDX, IDC_BUTTON_RB, m_rb);
DDX_Radio(pDX, IDC_RADIO1, m_nRadio);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDESDlg, CDialog)
//{{AFX_MSG_MAP(CDESDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_CC, OnClearCipher)
ON_BN_CLICKED(IDC_BUTTON_CP, OnClearPlain)
ON_BN_CLICKED(IDC_BUTTON_RB, OnRBrowse)
ON_BN_CLICKED(IDC_BUTTON_SB, OnSBrowse)
ON_BN_CLICKED(IDC_Decrypt, OnDecrypt)
ON_BN_CLICKED(IDC_Encrypt, OnEncrypt)
ON_BN_CLICKED(IDC_OutCipher, OnOutCipher)
ON_BN_CLICKED(IDC_OutPlaint, OnOutPlaint)
ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDESDlg message handlers
BOOL CDESDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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
SetWindowText("DES & 3DES");
m_sb.EnableWindow(false);
m_rb.EnableWindow(false);
return TRUE; // return TRUE unless you set the focus to a control
}
// 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 CDESDlg::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 CDESDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CDESDlg::OnClearCipher()
{
// TODO: Add your control notification handler code here
m_cipher.SetWindowText("");
}
void CDESDlg::OnClearPlain()
{
// TODO: Add your control notification handler code here
m_plain.SetWindowText("");
}
void CDESDlg::ClearAll()
{
m_plain.SetWindowText("");
m_cipher.SetWindowText("");
m_rfile.SetWindowText("");
m_sfile.SetWindowText("");
}
void CDESDlg::OnRBrowse()
{
// TODO: Add your control notification handler code here
static char BASED_CODE szFilter[] = "DES加密文件(*.des)|*.des|All Files (*.*)|*.*||";
int result;
FILE* handle;
int filelen;
//
CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL);
if (dlg.DoModal()==IDOK)
{
rflag = 1;
//
ClearAll();
//
strcpy(rfilename, dlg.GetPathName());
//
handle = fopen(rfilename, "rb");
filelen = filelength(fileno(handle));
result = fclose(handle);
if (filelen==0 || filelen%8!=0)
{
MessageBox("密文长度不对");
rflag = 0;
return;
}
//
m_rfile.SetWindowText(rfilename);
m_rfile.UpdateWindow();
//读入
result = copyfile(rfilename, RFILENAME);
//
ShowRText();
}
}
void CDESDlg::OnSBrowse()
{
// TODO: Add your control notification handler code here
static char BASED_CODE szFilter[] = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*||";
int result;
//
CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL);
if (dlg.DoModal()==IDOK)
{
sflag = 1;
editflag = 0;
ClearAll();
strcpy(sfilename, dlg.GetPathName());
m_sfile.SetWindowText(sfilename);
m_sfile.UpdateWindow();
//读入
result = copyfile(sfilename, SFILENAME);
//
// ShowSText();
}
}
int CDESDlg::copyfile(char *sfilename, char *dfilename)
{
int result;
result = CopyFile(sfilename, dfilename, FALSE);
return 0;
}
void CDESDlg::OnDecrypt()
{
// TODO: Add your control notification handler code here
if (m_key.GetWindowTextLength()==0)
{
MessageBox("请输入密钥");
return;
}
int keylen=m_key.GetWindowTextLength();
char *key;
key=new char[keylen+1];
memset(key,0,keylen+1);
m_key.GetWindowText(key,keylen+1);
if (m_nRadio==0)
{
memset(stext,0,TEXT_MAX+1);
memset(rtext,0,TEXT_MAX+1);
memset(rtext2,0,TEXT_MAX+1);
m_cipher.GetWindowText(rtext2,TEXT_MAX);
int length = m_cipher.GetWindowTextLength();
if (length == 0 || length%16!=0)
{
MessageBox("非法密文");
return;
}
HalfByteToByte(length);
//解密工作
des.DES_Act(stext,rtext,length,key,keylen,DECRYPT);
m_plain.SetWindowText(stext);
}
if (m_nRadio==1)
{
int i;
int filelen;
FILE* handle;
FILE* handle2;
int result;
//
if (rflag==0)
{
MessageBox("请先选择密文文件");
return;
}
handle = fopen(RFILENAME, "rb");
if (handle==NULL)
{
MessageBox("非法密文文件");
return;
}
filelen = filelength(fileno(handle));
if (filelen==0 || filelen%8!=0)
{
MessageBox("密文长度不对");
fclose(handle);
return;
}
handle2 = fopen(SFILENAME, "wb");
//准备工作
m_plain.SetWindowText("");
m_cipher.SetWindowText("");
//
for (i=0;i<filelen;i+=TEXT_MAX)
{
memset(rtext, 0, TEXT_MAX+1);
memset(stext, 0, TEXT_MAX+1);
rcount = fread(rtext, 1, TEXT_MAX, handle);
des.DES_Act(stext,rtext,rcount,key,keylen,DECRYPT);
result = fwrite(stext, 1, (rcount==TEXT_MAX)?TEXT_MAX:scount, handle2);
}
result = fclose(handle);
result = fclose(handle2);
//显示结果;
sflag = 1;
ShowSText();
ShowRText();
}
}
void CDESDlg::OnEncrypt()
{
// TODO: Add your control notification handler code here
if (m_key.GetWindowTextLength()==0)
{
MessageBox("请输入密钥");
return;
}
int keylen=m_key.GetWindowTextLength();
char *key;
key=new char[keylen+1];
memset(key,0,keylen+1);
m_key.GetWindowText(key,keylen+1);
if (m_nRadio==0)
{
memset(stext,0,TEXT_MAX+1);
memset(rtext,0,TEXT_MAX+1);
m_plain.GetWindowText(stext,TEXT_MAX);
int length = m_plain.GetWindowTextLength()+1;
m_plain.GetWindowText(stext,length);
//加密工作
des.DES_Act(rtext,stext,length,key,keylen,ENCRYPT);
ShowCihper(ceil(length/8.0)*8);
}
if (m_nRadio==1)
{
int filelen;
FILE* handle;
FILE* handle2;
int result;
if (sflag==0)
{
MessageBox("请先选择明文文件");
return;
}
//准备工作
m_rfile.SetWindowText("");
m_plain.SetWindowText("");
//
handle = fopen(SFILENAME, "rb");
if (handle==NULL)
{
MessageBox("非法明文文件");
return;
}
filelen = filelength(fileno(handle));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -