●●●●300分求:如何修改任意文件的文件头来实现文件加密[提供代码]●●●●(300分)

  • 主题发起人 主题发起人 lijianzhou
  • 开始时间 开始时间
L

lijianzhou

Unregistered / Unconfirmed
GUEST, unregistred user!
如题, 如何修改任意文件的文件头来实现文件加密,并提供解密代码。
需要注意的是,如果文件过大(如:几个G或几十个G)不影响速度为佳。本人想在文件头加几个特殊代码,但是后面代码会往后移动,大文件肯定会影响速度。有没有好的办法了呢?
 
文件头前几个byte xor 一下即可了
 
To sadnui:能不能提供一下代码啊?进行xor之后,关联的程序应该也都打不开才行。
 
文件头加几个特殊代码?

你做动态 加密?
找文件过滤的驱动 或 hook的代码吧。
我以前加密 flash 是用 hook 了 文件操作的 函数
在 函数了 动态解密的
 
简单写一个:
type
SByte = Array [0..255] of byte;
。。。。。。。
const
C1 = 52845;
C2 = 22719;
Key = 2008;

procedure EncryptFile(fName: string);
procedure Encrypt(S: SByte; var t: SByte; Key: Word);
var
I: byte;
begin
t[0] := S[0];
for I := 0 to 255 do begin
t := S xor (Key shr 8);
Key := (t + Key) * C1 + C2;
end;
end;
var
F: file;
Num: DWord;
temp1, temp2: SByte;
begin
AssignFile(F, fname);
if FileExists(fname) then begin
Reset(F,1);
Seek(F, 0);
BlockRead(F, temp1, sizeof(temp1), Num);
Encrypt(temp1,temp2, Key);
Seek(F, 0);
BlockWrite(F, temp2, sizeof(temp2), Num);
CloseFile(F);
end;
end;

procedure DeCryptFile(fName: string);
procedure Decrypt(S: SByte; var t: SByte; Key: Word);
var
I: byte;
begin
t[0] := S[0];
for I := 0 to 255 do begin
t := S xor (Key shr 8);
Key := (S + Key) * C1 + C2;
end;
end;
var
F: file;
Num: DWord;
temp1, temp2: SByte;
begin
AssignFile(F, fname);
if FileExists(fname) then begin
Reset(F,1);
Seek(F, 0);
BlockRead(F, temp1, sizeof(temp1), Num);
Decrypt(temp1,temp2, Key);
Seek(F, 0);
BlockWrite(F, temp2, sizeof(temp2), Num);
CloseFile(F);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin //加密
if OpenDialog1.Execute then
EncryptFile(OpenDialog1.FileName);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin //解密
if OpenDialog1.Execute then
DecryptFile(OpenDialog1.FileName);
end;
 
To kaida: 用你的代码加密了一些文件,可以达到目的,但是如txt文件加密后打开还是可以看到加密之后的内容,我希望是打开加密的文件提示文件损坏之类。而且我加密了几十G大小的mpg文件,照样能播放。有没有好的解决办法啊

我最终目的是:加密之后的文件,关联程序是不能打开,应该提示文件损坏之类.
 
任何文件都可以用文本方式打开,只不过非文本文件打开后可能是乱码。文本文件要想加密后不让别人看,只能全文加密。
 
只改文件头,只对特殊格式文件 有效
如果是通用文件,只加密文件头是不行的
如果用驱动就解决了
 
各位大虾:不用驱动能解决不?否则太麻烦了[8D]
 
有一些媒体文件的头信息在尾部或头尾都有,如果你仅仅加密头是不能通用的,另外如果是文本你要考虑文字内码的问题,如果不像全部加密,就要想方法让他在读取内码的时候出现问题,这个比较麻烦。
 
可以在文件头的固定地址内随即写入一些数据,造成打不开,还原的时候删除这部分数据
 
把文件头的前几个字节移到文件尾。文件前几个字节存加密信息,使用内存映射读写文件。
 
"把文件头的前几个字节移到文件尾。文件前几个字节存加密信息,使用内存映射读写文件。 "


能不能给个具体的代码?
 
我是专业做加密文件的
加密后的文件你打算如何使用?
比如,这是一个 a.mpg 视频文件
加密之后,所有的播放器都不能播放了,会提示不能识别文件类别等
但是你是将其解密后再用普通播放器放?
还是如何?
 
To kaida: 加密文件头和文件尾怎么写啊?
 
我上面写的就是加密文件头。加密文件尾没什么意义,原理跟加密文件头一样。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部