需要一个加密算法,要求不换密钥的前提下每次加密后密文都不一样,
对称或非对称均可,谢谢.

解决方案 »

  1.   

    Function jjm (Src:String; Key:String; Encrypt : Boolean):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:='Tom Lee';
         KeyPos:=0;
         SrcPos:=0;
         SrcAsc:=0;
         Range:=256;
         if Encrypt then
         begin
              Randomize;
              offset:=Random(Range);
              dest:=format('%1.2x',[offset]);
              for SrcPos := 1 to Length(Src) do
              begin
                   SrcAsc:=(Ord(Src[SrcPos]) + offset) MOD 255;
                   if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
                   SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
                   dest:=dest + format('%1.2x',[SrcAsc]);
                   offset:=SrcAsc;
              end;
         end
         else
         begin
              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);
         end;
         Result:=Dest;
    end;procedure TForm1.BitBtn3Click(Sender: TObject);
    var
     s  : string;
    begin
       s := jjm('wudi','wudi',true);
       showmessage(s);
       s := jjm(s,'wudi',false);
       ShowMessage(s);
    end;