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

📄 fileencrypt.cpp

📁 同学的毕业设计。基于Hpc密码的选择重传协议的数据传输。希望能供大家参考。谢谢 !
💻 CPP
字号:
// FILEencrypt.cpp : implementation file
//

#include "stdafx.h"
#include "TestServer.h"
#include "FILEencrypt.h"
#include "HPC.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFILEencrypt dialog


CFILEencrypt::CFILEencrypt(CWnd* pParent /*=NULL*/)
	: CDialog(CFILEencrypt::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFILEencrypt)
	m_strSrcFile = _T("");
	m_strDstFile = _T("");
	m_miyao = _T("");
	m_miyao2 = _T("");
	//}}AFX_DATA_INIT
}


void CFILEencrypt::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFILEencrypt)
	DDX_Text(pDX, IDC_EDIT1, m_strSrcFile);
	DDX_Text(pDX, IDC_EDIT2, m_strDstFile);
	DDX_Text(pDX, IDC_EDIT_SETMIYAO, m_miyao);
	DDV_MaxChars(pDX, m_miyao, 32);
	DDX_Text(pDX, IDC_EDIT_SETMIYAO2, m_miyao2);
	DDV_MaxChars(pDX, m_miyao2, 64);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFILEencrypt, CDialog)
	//{{AFX_MSG_MAP(CFILEencrypt)
	ON_BN_CLICKED(IDC_BUTTON_JIAMI, OnButtonJiami)
	ON_BN_CLICKED(IDC_BUTTON_SETMIYAO, OnButtonSetmiyao)
	ON_BN_CLICKED(IDC_BUTTON_SETMIYAO2, OnButtonSetmiyao2)
	ON_BN_CLICKED(IDC_BUTTON_JIEMI, OnButtonJiemi)
	ON_BN_CLICKED(IDC_BUTTON_OPEN, OnButtonOpen)
	ON_BN_CLICKED(IDC_BUTTON_AsSave, OnBUTTONAsSave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFILEencrypt message handlers

//DEL void CFILEencrypt::OnButtonCopy() 
//DEL {
//DEL UpdateData(TRUE);
//DEL 	
//DEL 	//构造CFile对象
//DEL 	CFile MyFile1(m_strSrcFile,CFile::modeRead);
//DEL 	CFile MyFile2(m_strDstFile,CFile::modeCreate|CFile::modeWrite);
//DEL 
//DEL 	//获得文件大小
//DEL 	DWORD Length = MyFile1.GetLength();
//DEL 	//分配缓冲区,大小为文件大小
//DEL 	void far* p = ::GlobalAlloc(0,Length); 
//DEL 	if(p==NULL)
//DEL 	{
//DEL 		AfxMessageBox("Alloc memory error!");
//DEL 	}
//DEL 
//DEL 	//将文件一的数据读到缓冲区中
//DEL 	MyFile1.ReadHuge(p,Length);
//DEL 	//将缓冲区中的数据写道文件二中,完成拷贝
//DEL 	MyFile2.WriteHuge(p,Length); 
//DEL 
//DEL 	//关闭文件对象
//DEL 	MyFile1.Close(); 
//DEL 	MyFile2.Close();
//DEL 
//DEL 	//释放缓冲区
//DEL 	::GlobalFree(p);
//DEL 	AfxMessageBox("File Copy Succeed!");	
//DEL }

void CFILEencrypt::OnButtonJiami() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	
	//构造CFile对象
	CFile MyFile1(m_strSrcFile,CFile::modeRead);
	CFile MyFile2(m_strDstFile,CFile::modeCreate|CFile::modeWrite);

	//获得文件大小
	DWORD Length = MyFile1.GetLength();
	DWORD l = ((Length-1)/16+1)*16;
	//分配缓冲区,大小为文件大小
	u4byte * p = new u4byte[l/4]; 
	if(p==NULL)
	{
		AfxMessageBox("Alloc memory error!");
	}
	memset(p,0,l);
	//将文件一的数据读到缓冲区中
	
	
	MyFile1.ReadHuge(p,Length);
	u4byte in[4],out[4];
	HPC Hpc1(miyao,key_len,spice);
	for(int j = 0;j<l/16;j++)
	{
		for(int i =0;i<4;i++)
		{
		in[i] = p[i+j*4];
		}
	Hpc1.encrypt(in,out);
	for(i =0;i<4;i++)
		{
		p[i+j*4] = out[i];
		}
	}
	
	

	//将缓冲区中的数据写道文件二中,完成拷贝
	MyFile2.WriteHuge(p,Length); 

	//关闭文件对象
	MyFile1.Close(); 
	MyFile2.Close();

	//释放缓冲区
	::GlobalFree(p);
	AfxMessageBox("encrypt Succeed!");	
}

void CFILEencrypt::OnButtonSetmiyao() 
{
	// TODO: Add your control notification handler code here
	CString b ;
	GetDlgItemText(IDC_EDIT_SETMIYAO,b);
	int l = b.GetLength();
	if(l<16)
	{
		MessageBox("密钥过短,至少需要128位");
		
	}
	else{
	int i,j;

	unsigned long ch[33];
		memset(ch,0,132);
	
	for(i=0;i<l;i++)
	{
	ch[i]=b.GetAt(i);
	}
	memset(miyao,0,32);
	
	for(j=0;j<(l-1)/4+1;j++)
	{
		for(i=0;i<4;i++)
		{	
		miyao[j]=miyao[j]<<8;
		miyao[j]=ch[j*4+i]|miyao[j];
		
		}
	}
		key_len = l*8;
	}
	OnButtonSetmiyao2() ;
}

void CFILEencrypt::OnButtonSetmiyao2() 
{
	// TODO: Add your control notification handler code here
	CString b ;
	GetDlgItemText(IDC_EDIT_SETMIYAO2,b);
	memset(spice,0,64);

	int l = b.GetLength();
	int i,j,k;
	unsigned long ch[65];
		memset(ch,0,260);
	for(i=0;i<l;i++)
	{
	ch[i]=b.GetAt(i);
	}
	for(k=0;k<8;k++)
	for(j=0;j<2;j++)
	{
		for(i=0;i<4;i++)
		{
		spice[k][j]=spice[k][j]<<8;
		spice[k][j]=ch[k*8+j*4+i]|spice[k][j];
		}
	}
}

void CFILEencrypt::OnButtonJiemi() 
{
	UpdateData(TRUE);
	
	//构造CFile对象
	CFile MyFile1(m_strSrcFile,CFile::modeRead);
	CFile MyFile2(m_strDstFile,CFile::modeCreate|CFile::modeWrite);

	//获得文件大小
	DWORD Length = MyFile1.GetLength();
	DWORD l = ((Length-1)/16+1)*16;
	//分配缓冲区,大小为文件大小
	u4byte * p = new u4byte[l/4]; 
	if(p==NULL)
	{
		AfxMessageBox("Alloc memory error!");
	}
	memset(p,0,l);
	//将文件一的数据读到缓冲区中
	
	
	MyFile1.ReadHuge(p,Length);
	u4byte in[4],out[4];
	HPC Hpc1(miyao,key_len,spice);
	for(int j = 0;j<l/16;j++)
	{
		for(int i =0;i<4;i++)
		{
		in[i] = p[i+j*4];
		}
	Hpc1.decrypt(in,out);
	for(i =0;i<4;i++)
		{
		p[i+j*4] = out[i];
		}
	}
	
	

	//将缓冲区中的数据写道文件二中,完成拷贝
	MyFile2.WriteHuge(p,Length); 

	//关闭文件对象
	MyFile1.Close(); 
	MyFile2.Close();

	//释放缓冲区
	::GlobalFree(p);
	AfxMessageBox("decrypt Succeed!");		
}


void CFILEencrypt::OnButtonOpen() 
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"All Files (*.*)|*.*||",NULL);
	if(dlg.DoModal() == IDOK)
	{
		m_strSrcFile = dlg.GetPathName();
		m_bWR = TRUE;
	}
	SetDlgItemText(IDC_EDIT1,m_strSrcFile);
}

void CFILEencrypt::OnBUTTONAsSave() 
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"All Files (*.*)|*.*||",NULL);
	if(dlg.DoModal() == IDOK)
	{
		m_strDstFile = dlg.GetPathName();
		m_bWR = FALSE;
	}
	SetDlgItemText(IDC_EDIT2,m_strDstFile);
}

⌨️ 快捷键说明

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