📄 fileencrypt.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 + -