安字母表顺序,后移3个,这个叫什么算法来着,忘了,是个很有名的入门级加密法
比如
原文:abc
密文:cde

解决方案 »

  1.   

    //加密函数
    Function EncrypKey (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;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;
    Result:=Dest;
    end;//解密函数
    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;