📄 password.cpp
字号:
#include "stdafx.h"
#include "Password.h"
#include "string.h"
#include "MyPassword.h"
CPassWord::CPassWord()
{
m_change = 4823013431;
}
CPassWord::ecfile(LPCTSTR fpath)
{
CFile *file;
file = new CFile;
//打开文件
if (!file->Open(fpath,CFile::shareDenyNone|CFile::modeReadWrite))
{
MessageBox(NULL,"No such file or can not open it","Mistakes",MB_OK);
delete file;
file = NULL;
return FALSE;
}
/////判断该文件是否已经被加密(加密后文件尾为***)
char *IsAdded = new char[4];
file->Seek(-4,CFile::end);
file->Read(IsAdded,4);
if (!strcmp(IsAdded,"***"))
{
MessageBox(NULL,"文件已加密,无法再次加密","加密",MB_OK);
file->Close();
delete []IsAdded;
IsAdded = NULL;
delete file;
file = NULL;
return FALSE;
}
file->SeekToBegin();
//
int flen = file->GetLength();
char * data = new char[flen];
//将文件信息读入data中
file->Read(data,flen);
//将data中的数据进行异或操作(加密)
for (int i=0;i<flen;i++)
{
data[i] ^= m_change;
}
file->SeekToBegin();
//将加密后的数据写入文件中
file->Write(data,flen);
file->SeekToEnd();
//将密码异或后写如文件中
char *str = new char[g_string.GetLength()+1];
for (i=0;i<g_string.GetLength();i++)
{
str[i] = g_string.GetAt(i);
str[i] ^= m_change;
}
str[i] = '\0';
g_string.Format(str);
file->Write(g_string,g_string.GetLength());
//将***写入文件中,用作判断文件是否已经被加密的标志
file->Write("***",4);
//
file->Close();
//释放堆空间
delete file;
file = NULL;
delete []data;
data = NULL;
delete []str;
str = NULL;
MessageBox(NULL,"文件已经加密","加密",MB_OK);
return TRUE;
}
CPassWord::dcfile(LPCTSTR fpath)
{
CFile *file;
file = new CFile;
//打开要解密的文件
if (!file->Open(fpath,CFile::shareDenyNone|CFile::modeReadWrite))
{
MessageBox(NULL,"No such file or can not open it","Mistakes",MB_OK);
return FALSE;
}
//检验文件是否已经加密
char *IsAdded = new char[4];
file->Seek(-4,CFile::end);
//将文件尾的信息读入IsAdded中
file->Read(IsAdded,4);
//判断文件是否被加密过
if (strcmp(IsAdded,"***"))
{
MessageBox(NULL,"文件尚未加密","加密",MB_OK);
file->Close();
delete []IsAdded;
IsAdded = NULL;
delete file;
file = NULL;
return FALSE;
}
file->SeekToBegin();
int flen = file->GetLength();
char *data = new char[flen];//文件数据信息
char *check =new char[g_string.GetLength()+1];//密码判断
file->Seek(-g_string.GetLength()-4,CFile::end);
file->Read(check,g_string.GetLength());
check[g_string.GetLength()] = '\0';
for (int i=0;i<g_string.GetLength();i++)
{
check[i] ^= m_change;
}
//判断密码是否正确
if (strcmp(g_string,check))
{
delete []check;
check =NULL;
delete []data;
data = NULL;
MessageBox(NULL,"密码错误,无法解密","解密失败",MB_OK);
return FALSE;
}
file->SeekToBegin();
//读入文件数据
file->Read(data,flen-g_string.GetLength()-4);
//将文件数据进行异或(解密)
for( i=0;i<flen-g_string.GetLength();i++)
{
data[i] ^= m_change;
}
//将解密后的数据写入文件中
file->SeekToBegin();
file->Write(data,flen-g_string.GetLength()-4);
file->SetLength(flen-g_string.GetLength()-4);
file->Close();
delete file;
file = NULL;
MessageBox(NULL,"文件已经成功解密","解密",MB_OK);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -