?? lock2dlg.cpp
字號:
// lock2Dlg.cpp : 實現(xiàn)文件
//
#include "stdafx.h"
#include "lock2.h"
#include "lock2Dlg.h"
#include ".\lock2dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于應(yīng)用程序“關(guān)于”菜單項的 CAboutDlg 對話框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 對話框數(shù)據(jù)
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 實現(xiàn)
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// Clock2Dlg 對話框
Clock2Dlg::Clock2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(Clock2Dlg::IDD, pParent)
, m_edit1(_T(""))
, m_edit2(_T("123456"))
, m_edit3(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void Clock2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_edit1);
DDX_Text(pDX, IDC_EDIT2, m_edit2);
DDX_Text(pDX, IDC_EDIT3, m_edit3);
}
BEGIN_MESSAGE_MAP(Clock2Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit1)
ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
END_MESSAGE_MAP()
// Clock2Dlg 消息處理程序
BOOL Clock2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 將\“關(guān)于...\”菜單項添加到系統(tǒng)菜單中。
// IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 設(shè)置此對話框的圖標。當應(yīng)用程序主窗口不是對話框時,框架將自動
// 執(zhí)行此操作
SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標
SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標
// TODO: 在此添加額外的初始化代碼
return TRUE; // 除非設(shè)置了控件的焦點,否則返回 TRUE
}
void Clock2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面的代碼
// 來繪制該圖標。對于使用文檔/視圖模型的 MFC 應(yīng)用程序,
// 這將由框架自動完成。
void Clock2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于繪制的設(shè)備上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使圖標在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 繪制圖標
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//當用戶拖動最小化窗口時系統(tǒng)調(diào)用此函數(shù)取得光標顯示。
HCURSOR Clock2Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void Clock2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知處理程序代碼
CFile hfile;
CFileDialog dlg(true,"","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"All Files (*.*)|*.*||");
//CProgressDialog ProDlg;//為子對話框的彈出設(shè)置變量,彈出方法隸屬一個CDialog類,則必須預(yù)先為子對話框建立一個基于CDialog類的類CProgressDlg,不要忘了加入頭文件。
if(dlg.DoModal()==IDOK)
{
//ProDlg.DoModal();//彈出進度條對話框
m_edit1=dlg.GetPathName();
CString filepath="C:\\Documents and Settings\\Administrator\\桌面\\";
CString filename=dlg.GetFileTitle();
CString fileformat=dlg.GetFileExt();
CFile savefile(filepath+filename+fileformat+".lock",CFile::modeReadWrite|CFile::modeCreate);
if (hfile.Open(m_edit1,CFile::modeRead|CFile::typeBinary))
{
__int64 totallength=hfile.GetLength();
__int64 tail=totallength%1024;
//獲得文件指針
if(totallength>1024)//大于1024字節(jié)的文件
{
//頭部處理
for(int block=0;block<totallength/1024;block++)//將文件分塊。
{
//將文件一個1024塊讀入內(nèi)存//
unsigned char blockbuffer[1024]={0};
unsigned char entropy[1024]={0};
hfile.Read(blockbuffer,1024);//將文件的1024個字節(jié)讀入內(nèi)存blockbuffer中去。
__int64 smallblocknum = 1024/codelength;//先將1024個單元按密碼長度再次分塊
for (int smallblock=0;smallblock<smallblocknum;smallblock++)
{
for (__int64 k=codelength*smallblock;k<codelength*smallblock+codelength;k++)
{
entropy[k]=code[k - codelength*smallblock] ^ blockbuffer[k];//加密后
}
}
//局部尾部處理
for (__int64 tt=codelength*smallblock;tt<1024;tt++)
{
entropy[tt]=blockbuffer[tt];
}
//保存整倍數(shù)塊過程
hfile.Seek(1024*(block+1),hfile.begin);//讀取1024個單位后,移動指針1024個字節(jié)
savefile.Write(entropy,1024);
}
//全局尾部處理:
unsigned char *tailbuffer=new unsigned char[tail];//為尾部數(shù)據(jù)設(shè)定緩沖區(qū)。
unsigned char *tailentropy=new unsigned char[tail];
hfile.Read(tailbuffer,tail);//將文件的尾部數(shù)據(jù)讀入緩存。
//尾部加密過程
__int64 tailsmallblocknum = tail/codelength;//先將tail個單元按密碼長度分塊
__int64 tailremain=tail%codelength;
for (int tailsmallblock=0;tailsmallblock<tailsmallblocknum;tailsmallblock++)
{
for (__int64 tailk=codelength*tailsmallblock;tailk<codelength*tailsmallblock+codelength;tailk++)
{
tailentropy[tailk]=code[tailk - codelength*tailsmallblock] ^ tailbuffer[tailk];//加密
}
}
for (__int64 tailqq=tailsmallblocknum*codelength;tailqq<tailsmallblocknum*codelength+tailremain;tailqq++)
{
tailentropy[tailqq]=code[tailqq-tailsmallblocknum*codelength]^tailbuffer[tailqq];
}
savefile.Write(tailbuffer,tail);
//delete[] entropy;
//delete[] blockbuffer;
savefile.Close();
}
else//小于1024個字節(jié)的文件
{
unsigned char *entropy=new unsigned char[totallength];
unsigned char *blockbuffer=new unsigned char[totallength];
hfile.Read(blockbuffer,totallength);
__int64 smallblocknum = totallength/codelength;//先將totallength個單元按密碼長度分塊
for (int smallblock=0;smallblock<smallblocknum;smallblock++)
{
for (__int64 k=codelength*smallblock;k<codelength*smallblock+codelength;k++)
{
entropy[k]=code[k - codelength*smallblock] ^ blockbuffer[k];//加密
}
}
for (__int64 qq=smallblocknum*codelength;qq<totallength;qq++)
{
entropy[qq]=blockbuffer[qq];
}
savefile.Write(entropy,totallength);
//delete[] entropy;
//delete[] blockbuffer;
savefile.Close();
}
}
m_edit3 = filepath+filename+fileformat+".lock";
}
UpdateData(false);
}
void Clock2Dlg::OnEnChangeEdit1()
{
// TODO: 如果該控件是 RICHEDIT 控件,則它將不會
// 發(fā)送該通知,除非重寫 CDialog::OnInitDialog()
// 函數(shù)并調(diào)用 CRichEditCtrl().SetEventMask(),
// 同時將 ENM_CHANGE 標志“或”運算到掩碼中。
// TODO: 在此添加控件通知處理程序代碼
UpdateData(true);
}
void Clock2Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知處理程序代碼
int i;
LPTSTR p = m_edit2.GetBufferSetLength(m_edit2.GetLength());//獲取字符串指針
codelength = m_edit2.GetLength();
for ( i=0 ; i< codelength ; i++ )
{
code[i] = p[i] + 0x80;//解決密碼轉(zhuǎn)換!
}
MessageBox("密碼轉(zhuǎn)換完畢");
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -