| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8289 人关注过本帖
标题:简单而且高效--利用XOR加密文件
只看楼主 加入收藏
bccnwshmm
Rank: 2
等 级:论坛游民
帖 子:18
专家分:16
注 册:2015-11-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
简单而且高效--利用XOR加密文件
    利用XOR加密,由于手段非常简单,没有很大的价值。但是,如果我们将密码的长度加长,其结果便有很大的不同。
    一般的密码长度,都要求在8个字节以上,也相当于64位。加上文字和符号混杂使用,破解的难度就更大。这样长的密码,加上好的加密方式,便可以得到保密度很高的加密文件。但是由于计算机的速度非常快,采用强力破解的方式 仍有可能破解。
    正是由于这种原因,最好的加密软件TrueCrypt,也建议利用增加密码文件来增强文件的抗破解能力。
    怎样才能实现更长的密码呢?最简单的方法便是利用一个长文件对另和个文件进行加密,由于文件的长度可以做到非常大,因此破解的难度也是很大的。
    例如,如果我们用一个8K的文件对另一文件进行XOR加密,其强力破解基本上是不可能的了。这样长密码,即使用最快的计算机来破解,也能花上万年的时间。
    下面 是利用一个文件来加密另一个文件的程序,因为要求加密文件长度不小于8K,文件加密的效果还是非常满意的。
    这个程序是在Delphi7.0下面调试完成的,如果版本不同,会有一些差异。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Memo1: TMemo;
    Image1: TImage;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FromF, ToF, MmF: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..8192] of Byte;
  MBuf: array[1..8192] of Byte;
  i: Integer;


implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
   if OpenDialog1.Execute then begin
   AssignFile(MmF, OpenDialog1.FileName);
   Reset(MmF, 1); { Record size = 1 }
   BlockRead(MmF, MBuf, SizeOf(MBuf), NumRead);
   end;
   
   if   NumRead<SizeOf(MBuf) then  begin
   showmessage('密码文件长度太小!');
   exit;
   end;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   if OpenDialog1.Execute then begin
   AssignFile(FromF, OpenDialog1.FileName);
   Reset(FromF, 1); { Record size = 1 }
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin

   if SaveDialog1.Execute then { Display Save dialog box}
   begin
     AssignFile(ToF, SaveDialog1.FileName); { Open output file }
     Rewrite(ToF, 1); { Record No. = 1 }
     Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
+ ' bytes...');

  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
     form2.show();
     repeat
       BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        if NumRead<>0 then begin
        i := 0;
        repeat
        i := i+1;
        Buf[i]:=Buf[i] xor MBuf[i];
        until i=NumRead;
        end;
       BlockWrite(ToF, Buf, NumRead, NumWritten);
    until (NumRead = 0) or (NumWritten <> NumRead);
    CloseFile(FromF);
    CloseFile(ToF);
    form2.Close();
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
close();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Memo1.Lines.LoadFromFile('material.txt');
end;

end.

[此贴子已经被作者于2015-12-31 20:38编辑过]

搜索更多相关主题的帖子: 加密软件 计算机 而且 价值 密码 
2015-12-31 20:25
eFun
Rank: 6Rank: 6
等 级:禁止访问
威 望:1
帖 子:58
专家分:400
注 册:2015-12-27
收藏
得分:20 
楼主威武!估计实用价值不高,根据字词的连续性、有意义性,破解还是很简单的。
2016-01-02 12:54
bccnwshmm
Rank: 2
等 级:论坛游民
帖 子:18
专家分:16
注 册:2015-11-20
收藏
得分:0 
回复 2楼 eFun
谢谢关心、回复。
我通常使用的密码文件是WinRar类型的压缩文件,这种文件的相关性是非常小的,效果还算不错。
2016-01-02 19:45
快速回复:简单而且高效--利用XOR加密文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015382 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved