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

📄 desdlg.cpp

📁 用des算法来进行加解密
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if (filelen==0)
		{
			MessageBox("明文为空");
			fclose(handle);
			return;
		}
		handle2	=	fopen(RFILENAME, "wb");
		//
		for (long j=0;j<filelen;j+=TEXT_MAX)
		{
			memset(stext, 0, TEXT_MAX+1);
			memset(rtext,0,TEXT_MAX+1);
			scount	=	fread(stext, 1, TEXT_MAX, handle);
			//加密工作:
			des.DES_Act(rtext,stext,scount,key,keylen,ENCRYPT);
			result	=	fwrite(rtext, 1, (scount % 8 != 0) ? (scount+8-scount%8) : scount, handle2);
		}			
		fclose(handle);
		fclose(handle2);		
		//
		rflag	=	1;
		//显示结果
		ShowCihper(ceil(scount/8.0)*8);
		// 		ShowSText();	
	}
}

void CDESDlg::OnOutCipher() 
{
	// TODO: Add your control notification handler code here
	static char BASED_CODE szFilter[] = "DES加密文件(*.des)|*.des|All Files (*.*)|*.*||";	
	int result;
	//
	if (m_cipher.GetWindowTextLength()==0)
	{
		MessageBox("密文为空");
		return;
	}
	if (m_nRadio==1)
	{
		if (rflag==0)
		{
			MessageBox("请先选择密文文件");
			return;
		}
		//
		CFileDialog dlg(false, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL);	
		if (dlg.DoModal()==IDOK)
		{
			memset(routfile,0,1024);
			//********************************************************
			//或缺文件类型
			//********************************************************
			DWORD filter_num = dlg.m_ofn.nFilterIndex;//返回的是当前选择的文件类型是第几个 
			filter_num -= 1;//适应数组 
			char a[][9] = {".des",""};//文件类型数组 
			
			CString file_ext = a[filter_num];//获得文件类型的名称 
			int ext_length = file_ext.GetLength();//获得长度		
			strcpy(routfile, dlg.GetPathName());
			int t=strlen(routfile);
			memcpy(routfile+t,file_ext.GetBuffer(0),ext_length);
			//********************************************************
			result	=	copyfile(RFILENAME, routfile);
			//
			MessageBox("密文输出完成");
		}
	}
	else
	{
CFileDialog dlg(false, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL);	
		if (dlg.DoModal()==IDOK)
		{
			memset(soutfile,0,1024);
			memset(stext,0,TEXT_MAX+1);
			//********************************************************
			//获取文件类型
			//********************************************************
			DWORD filter_num = dlg.m_ofn.nFilterIndex;//返回的是当前选择的文件类型是第几个 
			filter_num -= 1;//适应数组 
			char a[][9] = {".des",""};//文件类型数组 
			
			CString file_ext = a[filter_num];//获得文件类型的名称 
			int ext_length = file_ext.GetLength();//获得长度		
			strcpy(routfile, dlg.GetPathName());
			int t=strlen(routfile);
			if (dlg.GetPathName().Right(ext_length)!=file_ext)
					memcpy(routfile+t,file_ext.GetBuffer(0),ext_length);
			FILE* handle;
			handle = fopen(routfile,"wb");
			if (handle == NULL)
				return;
			m_cipher.GetWindowText(rtext,TEXT_MAX+1);
			long len = m_cipher.GetWindowTextLength();
			fwrite(rtext,1,len,handle);
			fclose(handle);
	// 		result	=	copyfile(SFILENAME, soutfile);
			//
			MessageBox("密文输出完成");
		}
	}
}

void CDESDlg::OnOutPlaint() 
{
	// TODO: Add your control notification handler code here
	static char BASED_CODE szFilter[] = "文本文件(*.txt)|*.txt|JPG图片(*.jpg)|*.jpg|BMP图片(*.bmp)|*.bmp|GIF图片(*.gif)|*.gif|WORD(*.doc)|*.doc|All Files (*.*)|*.*||";	
	int result;
	//
	if (m_nRadio==1)
	{
		if (sflag==0)
		{
			MessageBox("请先选择明文文件");
			return;
		}
		//	
		CFileDialog dlg(false, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL);	
		if (dlg.DoModal()==IDOK)
		{
			memset(soutfile,0,1024);
			//********************************************************
			//或缺文件类型
			//********************************************************
			DWORD filter_num = dlg.m_ofn.nFilterIndex;//返回的是当前选择的文件类型是第几个 
			filter_num -= 1;//适应数组 
			char a[][9] = {".txt",".jpg","bmp","gif","doc",""};//文件类型数组 
			
			CString file_ext = a[filter_num];//获得文件类型的名称 
			int ext_length = file_ext.GetLength();//获得长度		
			strcpy(soutfile, dlg.GetPathName());
			int t=strlen(soutfile);
			memcpy(soutfile+t,file_ext.GetBuffer(0),ext_length);
			result	=	copyfile(SFILENAME, soutfile);
			//
			MessageBox("明文输出完成");
		}
	}
	else
	{
		if (m_plain.GetWindowTextLength()==0)
		{
			MessageBox("明文为空"); 
			return;
		}
		CFileDialog dlg(false, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL);	
		if (dlg.DoModal()==IDOK)
		{
			memset(soutfile,0,1024);
			memset(stext,0,TEXT_MAX+1);
			//********************************************************
			//获取文件类型
			//********************************************************
			DWORD filter_num = dlg.m_ofn.nFilterIndex;//返回的是当前选择的文件类型是第几个 
			filter_num -= 1;//适应数组 
			char a[][9] = {".txt",".jpg","bmp","gif","doc",""};//文件类型数组 
			
			CString file_ext = a[filter_num];//获得文件类型的名称 
			int ext_length = file_ext.GetLength();//获得长度		
			strcpy(soutfile, dlg.GetPathName());
			int t=strlen(soutfile);
			if (dlg.GetPathName().Right(ext_length)!=file_ext)
					memcpy(soutfile+t,file_ext.GetBuffer(0),ext_length);
			FILE* handle;
			handle = fopen(soutfile,"wb");
			if (handle == NULL)
				return;
			m_plain.GetWindowText(stext,TEXT_MAX+1);
			long len = m_plain.GetWindowTextLength();
			fwrite(stext,1,len,handle);
			fclose(handle);
	// 		result	=	copyfile(SFILENAME, soutfile);
			//
			MessageBox("明文输出完成");
		}
	}
	
}

void CDESDlg::OnRadio1() 
{
	// TODO: Add your control notification handler code here
	if (m_nRadio==0) return;
	else
	{
		m_nRadio=0;
		ClearAll();
		m_sb.EnableWindow(false);
		m_rb.EnableWindow(false);
		sflag = 0;
		rflag = 0;
		DeleteFile(SFILENAME);
		DeleteFile(RFILENAME);
	}	
}

void CDESDlg::OnRadio2() 
{
	// TODO: Add your control notification handler code here
	if (m_nRadio==1) return;
	else
	{
		m_nRadio=1;
		ClearAll();
		m_sb.EnableWindow(true);
		m_rb.EnableWindow(true);
		sflag = 0;
		rflag = 0;
	}	
}

//显示明文
//用文本方式,将ASC的0转换为空格来显示
void CDESDlg::ShowSText() 
{
	// TODO: Add your control notification handler code here	
	int i;	
	FILE* handle;
	int result;
	//
	memset(stext, 0, TEXT_MAX+1);
	handle	=	fopen(SFILENAME, "rb");
	if (handle==NULL)
	{
		MessageBox("非法明文文件");		
		return;
	}
	scount	=	fread(stext, 1, TEXT_MAX, handle);
	result	=	fclose(handle);
	//处理	
	for (i=0; i<scount; i++)
	{
		if (stext[i]==0)
			stext2[i]	=	' ';
		else
			stext2[i]	=	stext[i];
	}
	stext2[scount]	=	0;
	//
	m_plain.SetWindowText(stext2);
	m_plain.UpdateWindow();
}

//显示密文
void CDESDlg::ShowRText() 
{
	// TODO: Add your control notification handler code here
// 	int i;	
	FILE* handle;
	int result;
	//
	memset(rtext, 0, TEXT_MAX+1);
	handle	=	fopen(RFILENAME, "rb");
	if (handle==NULL)
	{
		MessageBox("非法明文文件");		
		return;
	}
	scount	=	fread(rtext, 1, TEXT_MAX, handle);
	result	=	fclose(handle);
	ShowCihper(scount);
// 	for (i=0; i<scount; i++)
// 	{
// 		if (rtext[i]==0)
// 			rtext2[i]	=	' ';
// 		else
// 			rtext2[i]	=	rtext[i];
// 	}
// 	rtext2[scount]	=	0;
	//
// 	m_cipher.SetWindowText(rtext2);
// 	m_cipher.UpdateWindow();
}

void CDESDlg::ShowCihper(long len)
{
	// TODO: Add your control notification handler code here
	int i;
	int p;	
	unsigned char c1,c2,c3;	
	//处理	
	p	=	0;
	for (i=0; i<len; i++)
	{
			c3	=	rtext[i];
			c1  =   c3 >> 4;
			c2	=	c3 & 15;
			if (c1 <=9 && c1 >= 0) c1=c1+'0';
			if (c1 <=15 && c1 >= 10) c1=c1-10+'A';
			if (c2 <=9 && c2 >= 0) c2=c2+'0';
			if (c2 <=15 && c2 >= 10) c2=c2-10+'A';
			rtext2[p]=c1;
			rtext2[p+1]=c2;			
			p+=2;		
	}
	rtext2[p]	=	0;
	//
	m_cipher.SetWindowText(rtext2);	
// 	m_cipher.UpdateWindow();
}

void CDESDlg::HalfByteToByte(long len)
{
	// TODO: Add your control notification handler code here
	int i;
	//处理	
	for (i=0; i<len; i++)
	{
		if (rtext2[i]>='0' && rtext2[i] <= '9')  rtext2[i] = rtext2[i]-'0';
		if (rtext2[i]>='A' && rtext2[i] <= 'F')  rtext2[i] = rtext2[i]-'A'+10;		
	}	
	for (i=0;i<len;i+=2)
	{
		rtext[i/2] = rtext2[i]*16+rtext2[i+1];
	}
	rtext[i] = 0;
}

void CDESDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	CAbout dlg;
	dlg.DoModal();
}

⌨️ 快捷键说明

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