📄 des3.cpp
字号:
// DES3.cpp : 实现文件
//
#include "stdafx.h"
#include "DES.h"
#include "DES3.h"
void CreateSubKey(bool *Key);
void HexToBit(char *input,bool *output);
void BitToChar(bool *in,char *out,int LengthOfBit);
void BitToHex(bool *input,char *output);
void CharToBit(char *in,bool *out,int LengthOfBit);
void Run(bool *input,bool *output,int FLAG);
// CDES3 对话框
IMPLEMENT_DYNAMIC(CDES3, CDialog)
CDES3::CDES3(CWnd* pParent /*=NULL*/)
: CDialog(CDES3::IDD, pParent)
, key(_T(""))
{
m_font.CreatePointFont(150,"宋体");
}
CDES3::~CDES3()
{
}
void CDES3::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT4, key);
DDV_MaxChars(pDX, key, 16);
}
BEGIN_MESSAGE_MAP(CDES3, CDialog)
ON_BN_CLICKED(IDC_BUTTON3, &CDES3::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CDES3::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON1, &CDES3::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CDES3::OnBnClickedButton2)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
// CDES3 消息处理程序
CString inputfile;//输入文件
CString outputfile;//输出文件
void CDES3::OnBnClickedButton3()
{
static char BASED_CODE szfilter[]="All Files (*.*)|*.*||"; ;
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szfilter,NULL);
if (dlg.DoModal()==IDOK)
{
CFile file;
inputfile=dlg.GetPathName();
SetDlgItemText(IDC_EDIT1,inputfile);
}
}
void CDES3::OnBnClickedButton4()
{
static char BASED_CODE szfilter[]="All Files (*.*)|*.*||"; ;
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szfilter,NULL);
if (dlg.DoModal()==IDOK)
{
CFile file;
outputfile=dlg.GetPathName();
SetDlgItemText(IDC_EDIT2,outputfile);
}
}
void CDES3::OnBnClickedButton1()
{
//打开文件
int readnum=0;
FILE *mfile,*cfile;
GetDlgItemText(IDC_EDIT1,inputfile);
GetDlgItemText(IDC_EDIT2,outputfile);
fopen_s(&mfile,inputfile,"rb");
if(!(mfile)){
AfxMessageBox("明文文件不存在或文件无法打开!");
return;
}
fopen_s(&cfile,outputfile,"wb");
if(!(cfile)){
AfxMessageBox("密文文件无法打开!");
return;
}
int j;
GetDlgItemText(IDC_EDIT4,key);
while(!feof(mfile))
{
char tmp[1025]={0};
char cChar[1025]={0};
char keyHex[17]={0};
char cHex[17]={0};
bool mBit[64];
bool cBit[64];
bool keyBit[64];
char mChar[9]={0};
bool temp[8193]={0};
memcpy(keyHex,key,16);
//生成子密钥
HexToBit(keyHex,keyBit);
CreateSubKey(keyBit);
readnum=(int)fread(tmp,1,1024,mfile);
for(j=0;j<readnum/8;j++)
{
memcpy(mChar,tmp+j*8,8);
CharToBit(mChar,mBit,64);
Run(mBit,cBit,1);
memcpy(temp+j*64,cBit,64);
}
BitToChar(temp,cChar,readnum*8);
fwrite(cChar,1,readnum,cfile);
}
fclose(mfile);
fclose(cfile);
SetDlgItemText(IDC_DES1,"文件加密成功!!!");
}
void CDES3::OnBnClickedButton2()
{
//打开文件
int readnum=0;
FILE *mfile,*cfile;
GetDlgItemText(IDC_EDIT1,inputfile);
GetDlgItemText(IDC_EDIT2,outputfile);
fopen_s(&mfile,inputfile,"rb");
if(!(mfile)){
AfxMessageBox("密文文件不存在或文件无法打开!");
return;
}
fopen_s(&cfile,outputfile,"wb");
if(!(cfile)){
AfxMessageBox("明文文件无法打开!");
return;
}
int j;
GetDlgItemText(IDC_EDIT4,key);
while(!feof(mfile))
{
char keyHex[17]={0};
char cHex[17]={0};
bool mBit[64];
bool cBit[64];
bool keyBit[64];
char mChar[9]={0};
bool temp[8193]={0};
char tmp[1025]={0};
char cChar[1025]={0};
memcpy(keyHex,key,16);
//生成子密钥
HexToBit(keyHex,keyBit);
CreateSubKey(keyBit);
readnum=(int)fread(tmp,1,1024,mfile);
for(j=0;j<readnum/8;j++)
{
memcpy(mChar,tmp+j*8,8);
CharToBit(mChar,mBit,64);
Run(mBit,cBit,0);
memcpy(temp+j*64,cBit,64);
}
BitToChar(temp,cChar,readnum*8);
fwrite(cChar,1,readnum,cfile);
}
fclose(mfile);
fclose(cfile);
SetDlgItemText(IDC_DES1,"文件解密成功!!!");
}
HBRUSH CDES3::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if (pWnd->GetDlgCtrlID()==IDC_DES1)
{
pDC->SelectObject(&m_font);
pDC->SetTextColor(RGB(0,197,205));
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -