QQ登录

只需一步,快速开始

187上位机VC MFC加密解密实现文件保护功能

[ 复制链接 ]

187上位机VC MFC加密解密实现文件保护功能

187上位机VC MFC加密解密实现文件保护功能
187上位机VC MFC加密解密实现文件保护功能
功能展示
保护文件不被他人解读是很长见的功能,比如产品工艺参数不想让他人获取,QQ聊天记录不想让人知晓会对文件进行加密处理,在程序打开文件时再进行解密,我们当前例程也实现对指定文件的加密解密功能,效果如图;
要点提示
文件的解密与加密得进行文件读取与保存操作;对应Cfile类的Read()Write()函数;
加密解密过程为:
1.从文件读取内容,将内容的每个字节和一个固定数(例程为3)进行异或处理,处理结果再保存到另一个缓存文件,直到读取完文件内容为止;
2.将旧的文件删除,缓存的文件重命名进行重命名;
加密解密后例程调用ShellExecute()进行处理后的文件的打开操作;
1.函数功能:
你可以给它任何文件的名字,它都能识别出来并打开它。
2.函数原型:
HINSTANCEShellExecute(
                           HWNDhwnd,
                           LPCTSTRlpOperation,
                           LPCTSTRlpFile,
                           LPCTSTRlpParameters,
                           LPCTSTRlpDirectory,
                           INTnShowCmd
3.参数说明:
hwnd:
用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。
lpOperation:
用于指定要进行的操作。
“open”操作表示执行由lpFile参数指定的程序,或打开由lpFile参数指定的文件或文件夹;
“print”操作表示打印由lpFile参数指定的文件;
“explore”操作表示浏览由lpFile参数指定的文件夹。
当参数设为NULL时,表示执行默认操作“open”。  
lpFile:
用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
lpParameters:
若lpFile参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为NULL.
lpDirectory:
用于指定默认目录.
nShowCmd:
若lpFile参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
这个参数常用的常数:
SW_HIDE 隐藏窗口,活动状态给令一个窗口
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOWMAXIMIZED 最大化窗口,并将其激活
SW_SHOWMINIMIZED 最小化窗口,并将其激活
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
SW_SHOWNORMAL 与SW_RESTORE相同
若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。  
4.使用方法:
例如打开位图:
    ShellExecute(NULL,"open",“1.bmp",NULL,NULL,SW_SHOWNORMAL);      
用缺省的位图编辑器打开一个叫iloveu.bmp的位图文件,这个缺省的位图编辑器可能是 Microsoft Paint, Adobe Photoshop, 或者 Corel PhotoPaint。
打开TXT文本文件:
ShellExecute(this->m_hWnd,"open",sFilePath,NULL,NULL,SW_SHOWNORMAL);
实现功能
1.新建基于对话框的应用程序
2.拖拽两个按钮控件关联函数实现文件的加密与解密功能
  1. void CGkbc8Dlg::OnDecrypt()
  2. {
  3.         CFileDialog Dlg(TRUE,"文件",NULL,OFN_HIDEREADONLY,"FILE(*.txt)|*.txt||",NULL);
  4.         if(Dlg.DoModal()==IDOK)
  5.         {
  6.                 CString sFilePath,sTempPath;
  7.                 sFilePath=Dlg.GetPathName();
  8.                 sTempPath=sFilePath.Left(sFilePath.Find('.'));
  9.                 sTempPath+="-Temp";
  10.                 sTempPath+=sFilePath.Right(sFilePath.GetLength()-sFilePath.ReverseFind('.'));//同目录下缓存文件名
  11.                 //
  12.                 CFile ReadFile,WriteFile;
  13.                 if(!ReadFile.Open(sFilePath,CFile::modeRead))
  14.                         return;
  15.                 if(!WriteFile.Open(sTempPath,CFile::modeCreate|CFile::modeWrite) )
  16.                         return;
  17.                 //
  18.                 char buf[128];
  19.                 char desbuf[128];
  20.                 while(1)
  21.                 {
  22.                         ZeroMemory(buf,128);
  23.                         ZeroMemory(desbuf,128);
  24.                         DWORD i=ReadFile.Read(buf,128);
  25.                         
复制代码
  1. for(DWORD p=0;p<i;p++)
  2.                         {
  3.                                 char m=buf[p];
  4.                                 desbuf[p]=m^3;
  5.                         }
  6.                         WriteFile.Write(desbuf,i);
  7.                         if(i==0)
  8.                                 break;
  9.                 }
  10.                 ReadFile.Close();
  11.                 WriteFile.Close();
  12.                 ::DeleteFile(sFilePath);
  13.                 ::MoveFile(sTempPath,sFilePath);
  14.                
  15.                 ShellExecute(this->m_hWnd,"open",sFilePath,NULL,NULL,SW_SHOWNORMAL);//打开已解密的TXT文件
  16.         }
  17. }
  18. void CGkbc8Dlg::OnEncrypt()
  19. {
  20.         CFileDialog Dlg(TRUE,"文件",NULL,OFN_HIDEREADONLY,"FILE(*.txt)|*.txt||",NULL);
  21.         if(Dlg.DoModal()==IDOK)
  22.         {
  23.                 CString sFilePath,sTempPath;
  24.                 sFilePath=Dlg.GetPathName();
  25.                 sTempPath=sFilePath.Left(sFilePath.Find('.'));
  26.                 sTempPath+="-Temp";
  27.                 sTempPath+=sFilePath.Right(sFilePath.GetLength()-sFilePath.ReverseFind('.'));//同目录下缓存文件名
  28.                 //
  29.                 CFile ReadFile,WriteFile;
  30.                 if(!ReadFile.Open(sFilePath,CFile::modeRead))
  31.                         return;
  32.                 if(!WriteFile.Open(sTempPath,CFile::modeCreate|CFile::modeWrite) )
  33.                         return;
  34.                 //
  35.                 char buf[128];
  36.                 char desbuf[128];
  37.                
复制代码
  1. while(1)
  2.                 {
  3.                         ZeroMemory(buf,128);
  4.                         ZeroMemory(desbuf,128);
  5.                         DWORD i=ReadFile.Read(buf,128);
  6.                         for(DWORD p=0;p<i;p++)
  7.                         {
  8.                                 char m=buf[p];
  9.                                 desbuf[p]=m^3;
  10.                         }
  11.                         WriteFile.Write(desbuf,i);
  12.                         if(i==0)
  13.                                 break;
  14.                 }
  15.                 ReadFile.Close();
  16.                 WriteFile.Close();
  17.                 ::DeleteFile(sFilePath);
  18.                 ::MoveFile(sTempPath,sFilePath);
  19.                
  20.                 ShellExecute(this->m_hWnd,"open",sFilePath,NULL,NULL,SW_SHOWNORMAL);
  21.         }
  22. }
复制代码
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:187.上位机VC MFC加密解密实现文件保护功能.rar 
文件大小:137.08 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索