CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何加密存档文件

楼主dragonchow(十一壶)2001-03-27 10:37:00 在 Delphi / VCL组件开发及应用 提问

小游戏的最后有积分榜,如果将存档写入到文本文件中,可以从外部改动,如何以加密的形式写入文件,又如何读取 问题点数:30、回复次数:4Top

1 楼Fox_110(防暴狐狸)回复于 2001-03-27 14:51:00 得分 0

自己写一个有加解密功能的模块,保存和读取时分别加解密。Top

2 楼xzisgood(夏)回复于 2001-03-27 15:06:00 得分 25

下面的代码是我写的一个小的加密程序,你参考一下可以。  
  我操作的是无类型文件,如果你做积分榜可以用其他的方法。  
  unit   Unit1;  
  interface  
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls;  
  type  
      TForm1   =   class(TForm)  
          Edit1:   TEdit;  
          Label1:   TLabel;  
          Button1:   TButton;  
          Button2:   TButton;  
          Button3:   TButton;  
          OpenDialog1:   TOpenDialog;  
          SaveDialog1:   TSaveDialog;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   Button3Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
          procedure   bufcopy(var   buf:array   of   byte;s:ansistring);  
          procedure   BufXor(var   buf1,buf2,buf3:array   of   byte);  
          procedure   jiami(var   buf1,buf2,buf3:array   of   byte);  
          function   comparebuf(const   buf1,buf2:array   of   byte):boolean;  
      end;  
  const  
          fixedpassword=#133#68#183#02#08#120#76#166#212#66;  
          fileheader=#0#0#0#0#0#0#0#0#0#0#76#10#30#100#200#81#255#0#100#200;  
  var  
      Form1:   TForm1;  
      chgpassword,xorpassword,userpassword:array[1..20]   of   byte;  
  implementation  
   
  {$R   *.DFM}  
  //密码的最大长度是20位  
  {  
  加密的方式:  
  密码种类:userpassword       程序密码chgpassword     固定密码   fixedpass     异或密码   xorpassword  
   
  加密的文件包括:  
  1.文件头   fileheader  
  2.用户密码长度   一个byte保存  
  3.程序密码   chgpassword  
  4.异或密码   xorpassword  
  5.加密文件部分  
  6.100字节的垃圾信息  
  }  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
          OpenDialog1.Execute;  
  end;  
   
   
  procedure   TForm1.bufcopy(var   buf:array   of   byte;s:ansistring);  
  var   i,j,k,len:integer;  
  Begin  
          len:=length(s);  
          j:=low(buf);  
          k:=high(buf);  
          for   i:=j   to   k   do  
          Begin  
                  if   (i-j>len)   or   (len=0)   then  
                  begin  
                          buf[i]:=0;  
                          continue;  
                  end;  
                  buf[i]:=byte(s[i-j+1]);  
          End;  
  End;  
   
   
  procedure   TForm1.BufXor(var   buf1,buf2,buf3:array   of   byte);  
  var   i,j,k:integer;  
  Begin  
          j:=low(buf1);  
          k:=high(buf1);  
          for   i:=j   to   k   do  
          Begin  
                  buf3[i]:=buf1[i]   xor   buf2[i];  
          End;  
  End;  
   
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var         i,j,retn:integer;       mysource,mydest:file;  
                bufsrc,bufdst:array[1..20]   of   byte;  
  begin  
          if   OpenDialog1.FileName=''   then  
                  exit;  
          if   not   SaveDialog1.Execute   then  
                  exit;  
          Randomize;  
          bufcopy(userpassword,edit1.text);                 //用户密码产生  
          j:=length(edit1.text);  
          for   i:=1   to   20   do  
          begin  
                  chgpassword[i]:=Random(255);  
                  xorpassword[i]:=chgpassword[i]   ;  
                    edit1.text;  
                  sleep(12);  
          end;                                                                                           //机器密码产生  
          bufxor(chgpassword,userpassword,xorpassword);         //异或密码产生  
          assignfile(mysource,opendialog1.filename);  
          try  
                  assignfile(mydest,savedialog1.filename);  
                  try  
                          reset(mysource,1);  
                          rewrite(mydest,1);  
                          bufcopy(bufdst,fileheader);  
                          blockwrite(mydest,bufdst,20);                      
                          bufdst[1]:=length(edit1.text);  
                          blockwrite(mydest,bufdst,1);                      
                          blockwrite(mydest,chgpassword,sizeof(chgpassword));            
                          blockwrite(mydest,xorpassword,sizeof(xorpassword));            
                          repeat  
                                  blockread(mysource,bufsrc,sizeof(bufsrc),retn);  
                                  bufxor(bufsrc,xorpassword,bufdst);  
                                  blockwrite(mydest,bufdst,retn);  
                          until   retn=0;  
                  finally  
                          closefile(mydest);  
                  end;  
          finally  
                  closefile(mysource);  
          end;  
   
  end;  
   
   
  function   TForm1.comparebuf(const   buf1,buf2:array   of   byte):boolean;  
  var   i,mylow,myhigh:integer;  
  Begin  
          mylow:=low(buf1);  
          myhigh:=high(buf1);  
          result:=true;  
          for   i:=mylow   to   myhigh   do  
          Begin  
                  if   buf1[i]<>buf2[i]   then  
                          result:=false  
          End;  
  End;  
   
   
  procedure   TForm1.Button3Click(Sender:   TObject);  
  var   i,retn:integer;       mysource,mydest:file;       bufsrc,bufdst:array[1..20]   of   byte;  
  begin  
          if   OpenDialog1.FileName=''   then  
                  exit;  
          if   not   SaveDialog1.Execute   then  
                  exit;  
          assignfile(mysource,OpenDialog1.FileName);  
          try  
                  reset(mysource,1);  
                  blockread(mysource,bufsrc,sizeof(bufsrc),retn);  
                  bufcopy(userpassword,fileheader);  
                  if   not   comparebuf(bufsrc,userpassword)   then  
                  Begin  
                          showmessage('加密文件错误!'+#13+'请确定该文件是否用本软件加密.');  
                          exit;  
                  End;  
                  blockread(mysource,bufsrc,1,retn);  
                  if   length(edit1.text)<>bufsrc[1]   then  
                  Begin  
                          showmessage('密码错误!'+#13+'您不能解密该文件');  
                          exit;  
                  End;  
                  blockread(mysource,chgpassword,20,retn);  
                  if   retn<>20   then  
                  Begin  
                          showmessage('打开文件错误!');  
                          exit;  
                  End;  
                  blockread(mysource,xorpassword,20,retn);  
                  if   retn<>20   then  
                  Begin  
                          showmessage('打开文件错误!');  
                          exit;  
                  End;  
                  bufxor(xorpassword,chgpassword,userpassword);  
                  bufcopy(bufdst,edit1.text);  
                  if   not   comparebuf(userpassword,bufdst)   then  
                  Begin  
                          showmessage('密码错误!'+#13+'您不能解密该文件');  
                          exit;  
                  End;  
                  assignfile(mydest,savedialog1.filename);  
                  try  
                          rewrite(mydest,1);  
                          repeat  
                                  blockread(mysource,bufsrc,20,retn);  
                                  bufxor(bufsrc,xorpassword,bufdst);  
                                  blockwrite(mydest,bufdst,retn);  
                          until   retn=0;  
                  finally  
                          closefile(mydest);  
                  end;  
          finally  
                  try  
                          closefile(mysource);  
                  except  
                  end;  
          end;  
           
  end;  
   
  end.Top

3 楼BlueTrees(蜗牛)回复于 2001-03-28 15:17:00 得分 5

写到DLL中更好,谁也想不到,想到了也没有很快解决的办法Top

4 楼skt642()回复于 2001-05-31 17:42:00 得分 0

56970关注!Top

相关问题

  • 如何加密exe文件
  • rtf文件如何加密?
  • 如何加密PowerPoint文件?
  • 如何加密dll文件?
  • 如何对access文件加密!!!!
  • 如何写文件加密程序?
  • 如何对文件夹加密??
  • 如何加密文件夹?( 送分)
  • 如何对ASP文件进行加密
  • 如何打开加密zip文件???

关键词

  • 加密
  • 文件
  • 密码
  • 解密
  • bufsrc
  • mysource
  • bufdst
  • mydest
  • xorpassword
  • retn

得分解答快速导航

  • 帖主:dragonchow
  • xzisgood
  • BlueTrees

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo