var
  vStringStream: TStringStream;
begin
  vStringStream := TStringStream.Create(EncrypKey('参数1', '参数2'));
  try
    { TODO : 使用vStringStream }
  finally
    vStringStream.Free;
  end;
end;

解决方案 »

  1.   

    还有解密函数
    Function UncrypKey (Src:String; Key:String):string;
    var
       idx :integer;
       KeyLen :Integer;
       KeyPos :Integer;
       offset :Integer;
       dest :string;
       SrcPos :Integer;
       SrcAsc :Integer;
       TmpSrcAsc :Integer;
       Range :Integer;
    begin
         KeyLen:=Length(Key);
         if KeyLen = 0 then key:='Think Space';
         KeyPos:=0;
         SrcPos:=0;
         SrcAsc:=0;
         Range:=256;
         offset:=StrToInt('$'+ copy(src,1,2));
         SrcPos:=3;
         repeat
             SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
             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 := dest + chr(TmpSrcAsc);
             offset:=srcAsc;
             SrcPos:=SrcPos + 2;
         until SrcPos >= Length(Src);
    Result:=Dest;
    end;
      

  2.   

    var
      vStringStream: TStringStream;
    begin
      vStringStream := TStringStream.Create(UncrypKey('参数1', '参数2'));
      try
        { TODO : 使用vStringStream }
      finally
        vStringStream.Free;
      end;
    end;
      

  3.   

    这样写行不行
    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;
      

  4.   

    //请参考
    http://kingron.myetang.com/zsfunc0d.htm
      

  5.   

    请问里面有没有错误,是不是所有的字符都可以进行加密,包括中文和其他的一些字符,这个加密程序有没有限制,我试着打开一些文本文件,比较小的ok
    但是打开一些大的电影文件,或者exe文件,加密后再解密,这些文件就不行了,不知道为什么