请问关于下列加密程序,将原来的字符窜的输入输出,改成内存流的形式,不知道行不行,100分肯定送分(100分)

  • 主题发起人 主题发起人 gsfxm
  • 开始时间 开始时间
G

gsfxm

Unregistered / Unconfirmed
GUEST, unregistred user!
这样写行不行
Function EncryptionEngine(src:TMemoryStream;Encrypt : Boolean):TMemoryStream;
var
//idx :integer;
KEY :STRING;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :TMemoryStream;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
Range :Integer;
ch:byte;
ch1,ch2:char;

begin
RESULT:=TMemoryStream.Create;
DEST:=TMemoryStream.Create;
key:='abcd';
KeyLen:=Length(Key);
KeyPos:=0;
Range:=256;
if Encrypt then
begin
Randomize;
offset:=Random(Range);
dest.Position:=0;
src.Position:=0;
dest.Write(pchar(format('%1.2x',[offset]))^,2);
for SrcPos := 0 to Src.Size-1 do
begin
src.Read(ch,1);
SrcAsc:=(Ord(ch) + offset) MOD 255;
if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
dest.Write(pchar(format('%1.2x',[srcasc]))^,2);
offset:=SrcAsc;
end;
end
else
begin
src.Position:=0;
dest.Position:=0;
src.Read(ch1,1);
src.Read(ch2,1);
offset:=StrToInt('$'+ ch1+ch2);
SrcPos:=2;
repeat
src.Read(ch1,1);
src.Read(ch2,1);
SrcAsc:=StrToInt('$'+ ch1+ch2);
if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;
TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= offset then
TmpSrcAsc := 255 + TmpSrcAsc - offset
else
TmpSrcAsc := TmpSrcAsc - offset;
dest.Write(char(tmpsrcasc),1);
offset:=srcAsc;
SrcPos:=SrcPos + 2;
until SrcPos >= Src.Size-1;
end;
result.Position:=0;
dest.Position:=0;
Result.CopyFrom(Dest,dest.Size);
dest.Free;
end;
 
行,为什么不行。
 
请问里面有没有错误,是不是所有的字符都可以进行加密,包括中文和其他的一些字符,
这个加密程序有没有限制
 
我试着打开一些文本文件,比较小的ok
但是打开一些大的电影文件,或者exe文件,加密后再解密,这些文件就不行了,不知道为什么
 
这样的加密效果可能不是很好,我建议你到国外的网站
下载一些类似MD5或BlockCipher等加密算法,一个加密
速度快,另外,加密效果也相当不错!
另外,其实不管是TmemoryStream还是什么数据类型都可以
当作字符串处理.
 
其实我也觉得这个太慢了,而且原来一兆的文件就变成2兆了,不太好[:(]
能告诉我具体的地址吗?最好有原码,我用的是delphi6。[:)]
 
后退
顶部