实现文件加密功能

我前几天在VC知识库(VCKBASE.COM)下载了一个 "徐景周" 做的一个叫<加密之星>的小工具的源代码,我把它编译后拿文件来实验一下发现它对大多数文件都不管用.比如,加密文本文件只有文件的前一部分被加密而大部分还完整的存在, 如果用来加密mp3,简直就不起作用,加密后的mp3还是能很好的从头播放的尾..所以我自己发明了一种文件加密的方法,虽然很简单,但是能安全地加密任何计算机上的文件而且还可以用同一密码对同一文件进行多次加密。

我用的方法是把文件从头到尾的每一个字节都读出来然后加密,具体做法如下:(请参照源代码);

新建一个基于对话框的工程(起名为ecflie,然后去掉确定、取消、和系统添加的静态控件.在对话框添加三个按钮和两个编辑控件.给两个编辑控件分别关联变量CString m_path和CString m_pass,其中m_pass作为用户输入的密码,m_path作为文件路径;

其中三个按钮分别为浏览、加密、解密按钮.

添加以下函数:

__int64 epass(); //密码初始化函数
BOOL ecfile(LPCTSTR fpath);//文件加密函数
BOOL dcfile(LPCTSTR fpath);//文件解密函数

//给文件加密的函数BOOL CEcfileDlg::ecfile(LPCTSTR fpath)
{
  char *data;
  CFile *file;
  DWORD flen;
  m_password = epass();//密码初始化
  file = new CFile;
  if ( !file->Open(fpath, CFile::shareDenyNone|CFile::modeReadWrite))
  {
    return FALSE;
  }
  flen = file->GetLength();
  data = new char[(int)flen];//为文件分配内存
  file->SeekToBegin();
  file->Read(data, flen);
    //这里把文件的所有字节都进行加密了
  for(int i=0; i<(int)flen; i++)
  {
    data[i] ^= m_password;
    data[i] ^= flen; //因为每次加密后文件的大小都会增加5字节,所以如果两次用同一密码进行加密也没关系
  }
  file->SeekToBegin();
  file->Write(data, flen);
  delete[] data; //先释放内存
  //添加密码验证信息
  char cpass[5] = "love";
  for(int j=0; j<5; j++)
  {
    cpass[j] ^= m_password;
  }
  file->SeekToEnd();
  file->Write(&cpass, 5); //在文件尾添加密码严整部分,,这样文件就会增加5字节
  file->Close();
  delete file;
  return TRUE;
}

//给文件解密的函数BOOL CEcfileDlg::dcfile(LPCTSTR fpath)
{
  char *data;
  CFile *file;
  DWORD flen;
  char love[5];
  file = new CFile;
  if( !file->Open(fpath, CFile::shareDenyNone|CFile::modeReadWrite))
  {
    return FALSE;
  }
  flen = file->GetLength();
  data = new char[(int)flen];
  //检验密码是不是正确
  file->Seek(-5, CFile::end);
  file->Read(&love, 5);
  m_password = epass();
  for(int i=0; i<5; i++)
  {
       love[i] ^= m_password;
  }
  if(strcmp(love, "love")!=0)
  {
    return FALSE;
  }
  //解密
  file->SeekToBegin();
  file->Read(data, flen);
    //按照原来的方法进行解密
  for(int j=0; j<(int)flen; j++)
  {
    data[j] ^= m_password;
    data[j] ^= (flen-5);
  }
  file->SeekToBegin();
  file->Write(data, flen);
  file->SetLength(flen-5); //删除加密是添加的密码验证部分
  file->Close();
  delete[] data;
  delete file;
  return TRUE;
}

上面取得密码的函数(m_password = epass();)可以自己定义,我只把密码进行简单的运算:__int64 CEcfileDlg::epass()
{
  DWORD plen;
  char *ppass;
  __int64 mc= 8757735233305;
  UpdateData(TRUE);
  ppass = m_pass.GetBuffer(0);
  plen = strlen(ppass);
  for(int i=0; i<(int)plen; i++)
  {
    mc ^= ppass[i]|128;
  }
  return mc;
}

然后在适当的地方调用这两个函数就可以了. 具体细节请查看源代码,(在WIN XP下调试通过了)。

本文配套源码

时间: 2024-10-31 01:13:18

实现文件加密功能的相关文章

xp文件夹加密及文件加密应用详解

Windows XP文件加密功能强大并且简单易用,因而许多用户都使用它来保护自己的重要文件.但由于大部分用户对该功能了解不足,在使用过程中经常出现问题,在本刊"电脑医院"中我们也频繁地收到读者的求助信,为此,CHIP在这里将特意为您详细介绍有关该功能的使用技巧. 微软在Windows2000中内建了文件加密功能,该功能后来被移植到WinXP中.使用该功能,我们只需简单地单击几下鼠标就可以将指定的文件或者文件夹进行加密,而且在加密后我们依然可以和没加密前一样方便地访问和使用它们,非常方便

用超级加密3000给文件加密解密的方法

本软件是一个功能强大.安全高效,简单易用的数据加密和保护软件. 它有超快和最强的文件夹,文件加密功能.数据保护功能,文件夹.文件的粉碎删除以及文件夹伪装等功能. 1.运行软件 双击桌面上的图标 或者点击"开始→程序→超级加密3000→超级加密3000"即可运行该软件.进入软件主界面. 超级加密3000的界面有点类似于资源管理器的界面,看上去非常简洁,功能按钮在上方一目了然.左侧的目录树空格及右侧的目录内容空格使得文件的选择非常方便. 二.蔠级加密3000的功能之一磁盘保护 该软件还提供

PHP中的加密功能

加密 数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据.如果对于采用安全措施有兴趣的话,也一定会有兴趣了解PHP提供的一系列安全功能.在本篇文章中,我们将介绍这些功能,提供一些基本的用法,以便你能够为自己的应用软件中增加安全功能. 预备知识 在详细介绍PHP的安全功能之前,我们需要花点时间来向没有接触过这方面内容的读者介绍一些有关密码学的基本知识,如果对密码学的基本概念已经非常熟悉,就可以跳过去这一部分. 密码学可以通俗地被描述为对加/解密的研究和实

PHP安全编程之加密功能

安全|编程|加密 数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据.如果对于采用安全措施有兴趣的话,也一定会有兴趣了解PHP提供的一系列安全功能.在本篇文章中,我们将介绍这些功能,提供一些基本的用法,以便你能够为自己的应用软件中增加安全功能. 预备知识 在详细介绍PHP的安全功能之前,我们需要花点时间来向没有接触过这方面内容的读者介绍一些有关密码学的基本知识,如果对密码学的基本概念已经非常熟悉,就可以跳过去这一部分. 密码学可以通俗地被描述为对加/解

PHP基础:详解Apache中.htaccess文件的功能写法

apache中.htaccess文件的功能写法 - .htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限制.管理员可以通过Apache的AllowOverride指令来设置. - 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令. - .htaccess必须以ASCII模式上传,最好将其权限设置为644. 错误文档的定位 常用的客

用VC++给Foxbase数据库文件加密

Visual C++ 是一种功能十分强大的程序设计语言,利用它可以很方便.快捷的开发出Windows 下的各种应用程序.尤其是其内置了数据库的接口,可使我们毫不费力地操作Accse,FoxBASE+ 等许多数据库文件.但在安全性上,由于FoxBASE+ 是一种早期的产品,所以,不能像Accse 那样为数据库文件本身加密,这就可以让入侵者直接对数据库操作而导致数据的损失. 本文提供的方法可以做为一个小的模块放到你的应用程序中调用,实现数据库的加解密. 首先,打开Visual C++ 5.0 选择N

excel如何将文件加密起来?

  excel如何将文件加密起来? 1.双击Microsoft Excel 2010快捷键图标打开Excel软件,主界面如下图如示. 2.在功能选项栏中选择"文件"选项卡,然后点击"另存为"按钮. 3.弹出"另存为"对话框中,点击界面右下角"工具"按钮,然后点击"常规选项"按钮. 4.弹出"常规选项"对话框,分别在"打开权限密码"栏中输入密码:则每次打开该文件时需输入

介绍Win7闪存盘加密功能

现在我们都会选择小巧玲珑的闪存盘作为可移动的存储设备,不过如果万一遗失的话,恐怕可能会导致数据的丢失,但使用第三方的加密软件却又相当麻烦,毕竟安装.注册也不是件容易事.其实,如果您已经开始Win 7,那么可以借助BitLocker为闪存盘添加"原生"的加密功能,而且操作也是相当的简单. 按步就班 快速加密闪存盘 其实,早在Windows Vista时代,操作系统就已经提供名为BitLocker的安全功能,不过仅仅在企业版和旗舰版本中得到应用.Win 7的BitLocker功能更为强大,

Win 7下活用闪存盘“原生”加密功能

  相信很多朋友都会选择小巧玲珑的闪存盘作为可移动的存储设备,不过如果万一遗失的话,恐怕可能会导致数据的丢失,但使用第三方的加密软件却又相当麻烦,毕竟安装.注册也不是件容易事.其实,如果你已经开始Windows 7,那么可以借助BitLocker为闪存盘添加"原生"的加密功能,而且操作也是相当的简单. 按步就班 快速加密闪存盘 其实,早在Windows Vista时代,操作系统就已经提供名为BitLocker的安全功能,不过仅仅在企业版和旗舰版本中得到应用.Windows 7的BitL