📄 myencryptfile.cpp
字号:
// MyEncryptFile.cpp: implementation of the CMyEncryptFile class.
//
//////////////////////////////////////////////////////////////////////
#include "MyEncryptFile.h"
#include "stdio.h"
#include "stdlib.h"
#include "io.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMyEncryptFile::CMyEncryptFile(int nSeed) : m_pBuf(NULL), m_nSize(0)
{
::srand(nSeed);
for (int i=0; i<ENCRYPT_SIZE; i++)
{
m_bufCode[i] = ::rand()%256;
}
}
CMyEncryptFile::~CMyEncryptFile()
{
this->Close();
}
//////////////////////////////////////////////////////////////////////
bool CMyEncryptFile::Open(const char* pszFile)
{
if (!pszFile)
return false;
this->Close();
// open and read file
FILE* fp = fopen(pszFile, "rb");
if (!fp)
return false;
m_nSize = filelength(fileno(fp));
m_pBuf = malloc(m_nSize);
if (!m_pBuf)
{
fclose(fp);
return false;
}
if (1 != fread(m_pBuf, m_nSize, 1L, fp))
{
fclose(fp);
return false;
}
fclose(fp);
// decrypt file
this->Decrypt(m_pBuf, m_nSize);
return true;
}
//////////////////////////////////////////////////////////////////////
void CMyEncryptFile::Close()
{
if (m_pBuf)
free(m_pBuf);
m_pBuf = NULL;
m_nSize = 0;
}
//////////////////////////////////////////////////////////////////////
// 加密算法是循环左移offset%8, 然后异或大小为128的buf
void CMyEncryptFile::Encrypt(void* pBuf, int nSize)
{
if (!pBuf || nSize <= 0)
return;
BYTE* buf = (BYTE*)pBuf;
for (int i=0; i<nSize; i++)
{
BYTE c = (buf[i] << (i%8)) + (buf[i] >> (8 - i%8));
buf[i] = c^m_bufCode[i%ENCRYPT_SIZE];
}
}
//////////////////////////////////////////////////////////////////////
void CMyEncryptFile::Decrypt(void* pBuf, int nSize)
{
if (!pBuf || nSize <= 0)
return;
BYTE* buf = (BYTE*)pBuf;
for (int i=0; i<nSize; i++)
{
BYTE c = buf[i]^m_bufCode[i%ENCRYPT_SIZE];
buf[i] = (c >> (i%8)) + (c << (8 - i%8));
}
}
//////////////////////////////////////////////////////////////////////
bool CMyEncryptFile::EncryptFile(const char* pszFile)
{
if (!pszFile)
return false;
// open and read file
FILE* fp = fopen(pszFile, "rb");
if (!fp)
return false;
int nSize = filelength(fileno(fp));
void* pBuf = malloc(nSize);
if (!pBuf)
{
fclose(fp);
return false;
}
if (1 != fread(pBuf, nSize, 1L, fp))
{
fclose(fp);
return false;
}
fclose(fp);
// encrypt buf
this->Encrypt(pBuf, nSize);
// save encrypted file
char szEncryptFile[256] = "";
sprintf(szEncryptFile, "%s.encrypt", pszFile);
fp = fopen(szEncryptFile, "wb");
if (!fp)
return false;
fwrite(pBuf, nSize, 1L, fp);
fclose(fp);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -