VC打造文件加密工具

          再实际生活中,不管是出于何种目的还是出于何种原因,总能希望自己的一些数据能够安全,不被第三方获取,或者被获取之后也让第三方无法解密.比如我工作的地方所有网络流量都被监控,再论坛上发个贴都能被网管看到,更别说传私人文件了,于是弄了个文件加密工具.
          加密原理很简单,给一个密码,对文件的每位和密码的每位进行异或,如此循环,解密方只要知道密码,就能解密出正确的文件.因为是自己用,所以加密算法就这么简单了,有高安全要求的可以把RSA,DES什么的全弄上去
          核心代码如下
//  FileEncryptDlg.cpp : 实现文件
//

#include 
" stdafx.h "
#include 
" FileEncrypt.h "
#include 
" FileEncryptDlg.h "

#ifdef _DEBUG
#define  new DEBUG_NEW
#endif


//  用于应用程序“关于”菜单项的 CAboutDlg 对话框

class  CAboutDlg :  public  CDialog
{
public:
    CAboutDlg();

// 对话框数据
    enum { IDD = IDD_ABOUTBOX };

    
protected:
    
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
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()


//  CFileEncryptDlg 对话框




CFileEncryptDlg::CFileEncryptDlg(CWnd
*  pParent  /*=NULL*/ )
    : CDialog(CFileEncryptDlg::IDD, pParent)
    , m_FilePath(_T(
"" ))
    , m_Key(_T(
"" ))
    , m_Dlg(NULL)
{
    m_hIcon 
= AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}


void  CFileEncryptDlg::DoDataExchange(CDataExchange *  pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_FILEPATH, m_FilePath);
}


BEGIN_MESSAGE_MAP(CFileEncryptDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    
// }}AFX_MSG_MAP
    ON_BN_CLICKED(IDC_BROWER,  & CFileEncryptDlg::OnBnClickedBrower)
    ON_BN_CLICKED(IDC_ENCRYPT, 
& CFileEncryptDlg::OnBnClickedEncrypt)
    ON_BN_CLICKED(IDC_DECRYPT, 
& CFileEncryptDlg::OnBnClickedDecrypt)
END_MESSAGE_MAP()


//  CFileEncryptDlg 消息处理程序

BOOL CFileEncryptDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    
// 将“关于...”菜单项添加到系统菜单中。

    
// IDM_ABOUTBOX 必须在系统命令范围内。
    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);
        }

    }


    
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    
//  执行此操作
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    
// TODO: 在此添加额外的初始化代码

    
return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}


void  CFileEncryptDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    
if ((nID & 0xFFF0== IDM_ABOUTBOX)
    
{
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }

    
else
    
{
        CDialog::OnSysCommand(nID, lParam);
    }

}


//  如果向对话框添加最小化按钮,则需要下面的代码
//   来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//   这将由框架自动完成。

void  CFileEncryptDlg::OnPaint()
{
    
if (IsIconic())
    
{
        CPaintDC dc(
this); // 用于绘制的设备上下文

        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();
    }

}


// 当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CFileEncryptDlg::OnQueryDragIcon()
{
    
return static_cast<HCURSOR>(m_hIcon);
}



void  CFileEncryptDlg::OnBnClickedBrower()
{
    
// TODO: 在此添加控件通知处理程序代码
    CFileDialog dlg(TRUE,"","",4|2,"所有文件(*.*)|*.*||",0,0);
    
if(dlg.DoModal() == IDOK)
    
{
        m_FilePath 
= dlg.GetPathName();
        UpdateData(FALSE);
    }

}


/*
 * 检测文件
 
*/

BOOL CFileEncryptDlg::XORFile()
{
    CFileFind fFind;
    
if(!fFind.FindFile(m_FilePath,0))
    
{
        AfxMessageBox(
"未找到文件",0,0);
        
return FALSE;
    }


    
//设置密码
    m_Dlg = new CKeyDlg;
    
if(m_Dlg->DoModal())
    
{
        m_Key 
= m_Dlg->m_Key==""?"red":m_Dlg->m_Key;
    }


    
//读文件
    CFile myFile(m_FilePath,CFile::modeRead);
    DWORD myFileLen 
= myFile.GetLength();
    BYTE
* fileBuffer = new BYTE[myFileLen];
    myFile.Read(fileBuffer,myFileLen);
    myFile.Close();
    
    
char* Key = m_Key.GetBuffer();
    
int KeyLen = sizeof(Key);

    
//加密
    for(int i=0;i<myFileLen;i++)
    
{
        fileBuffer[i] 
^= Key[i%KeyLen];           
    }


    
//保存
    CFile newFile(m_FilePath+".Enc",CFile::modeCreate | CFile::modeWrite);
    newFile.Write(fileBuffer,myFileLen);
    newFile.Close();

    
return TRUE;
}


void  CFileEncryptDlg::OnBnClickedEncrypt()
{
    
// TODO: 在此添加控件通知处理程序代码
    if(XORFile())
        AfxMessageBox(
"加密完成",0,0);
}


void  CFileEncryptDlg::OnBnClickedDecrypt()
{
    
// TODO: 在此添加控件通知处理程序代码
     if(XORFile())
        AfxMessageBox(
"解密完成",0,0);
}


        加密的强度是很低的,破解的方法麻,对于一个知道类型的文件,比如exe可以把固定的几个字符拿出来异或一下,这样,私有密钥就出来了
MICROSOFT 基础类库: xmlEnctry 项目概述 =============================================================================== 应用程序向导已为您创建了此 xmlEnctry 应用程序。此应用程序 不仅介绍了使用 Microsoft 基础类的基本知识, 而且是编写应用程序的起点。 此文件包含组成 xmlEnctry 应用程序的每个文件的内容摘要。 xmlEnctry.vcproj 这是使用“应用程序向导”生成的 VC++ 项目的主项目文件。 它包含有关生成文件的 Visual C++ 版本的信息,以及 有关用“应用程序向导”所选择的平台、配置和 项目功能的信息。 xmlEnctry.h 这是应用程序的主头文件。 它包含其他 项目特定的头文件(包括 Resource.h),并声明 CxmlEnctryApp 应用程序类。 xmlEnctry.cpp 这是包含应用程序 类 CxmlEnctryApp 的主应用程序源文件。 xmlEnctry.rc 这是程序使用的所有 Microsoft Windows 资源 的列表。 它包含存储在 RES 子目录中 的图标、位图和光标。 可直接在 Microsoft Visual C++ 中编辑此文件。 项目资源包含在 2052 中。 res\xmlEnctry.ico 这是一个图标文件,用作应用程序的图标。 此 图标包含在主资源文件 xmlEnctry.rc 中。 res\xmlEnctry.rc2 此文件包含不由 Microsoft Visual C++ 编辑的资源。 应将所有不能由 资源编辑器编辑的资源放在此文件中。 ///////////////////////////////////////////////////////////////////////////// 应用程序向导将创建一个对话框类: xmlEnctryDlg.h、xmlEnctryDlg.cpp - 对话框 这些文件包含 CxmlEnctryDlg 类。 此类定义 应用程序主对话框的行为。 此对话框的模板包含在 xmlEnctry.rc 中,而此文件可以在 Microsoft Visual C++ 中进行编辑。 ///////////////////////////////////////////////////////////////////////////// 其他功能: ActiveX 控件 应用程序支持使用 ActiveX 控件。 ///////////////////////////////////////////////////////////////////////////// 其他标准文件: StdAfx.h、StdAfx.cpp 这些文件用于生成名为 xmlEnctry.pch 的预编译头文件 (PCH) 和名为 StdAfx.obj 的预编译类型文件。 Resource.h 这是标准头文件,它定义新资源 ID。 Microsoft Visual C++ 将读取并更新此文件。 ///////////////////////////////////////////////////////////////////////////// 其他说明: 应用程序向导使用“TODO:” 来指示 应添加或自定义的源代码部分。 如果应用程序在共享 DLL 中使用 MFC,且应用程序使用的语言不是 操作系统的当前语言,则需要从 Microsoft Visual C++ 光盘上 Win\System 目录下将相应的本地化资源 MFC70XXX.DLL 复制到计算机的 system 或 system32 目录下, 并将其重命名为 MFCLOC.DLL。 (“XXX”代表 语言缩写。 例如,MFC70DEU.DLL 包含翻译成 德语的资源。) 如果不这样做,应用程序的某些 UI 元素 将保留为操作系统的语言。 /////////////////////////////////////////////////////////////////////////////
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值