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

📄 des3.cpp

📁 des加密 支持短块加密 文件加密 弱密钥过滤 还附加随机性测试
💻 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 + -