如题
给个简单的字符串加密算法~~~
要加密完的字符都是字母的数字的
本人在做软件的注册码
下面的是我现在用的加密算法 
但是这个算法会产生一些很奇怪的符号(如'$"#之类的) 我希望得到的数字或者字母的
有没有什么算法介绍?
不要太难简单就好了:)
或者帮我下面的代码改改 可以只产生出数字和字母的
function TForm1.DisplayToString(mDisplay: string): string;
var
I: Integer;
S: string;
B: Boolean;
begin
Result := '';
B := False;
mDisplay := mDisplay;
for I := 1 to Length(mDisplay) do
if B then case mDisplay[I] of
'''': begin
if S <> '' then Result := Result + StringReplace(S, '''''', '''', [rfReplaceAll]);
if Copy(mDisplay, I + 1, 1) = '''' then Result := Result + '''';
S := '';
B := False;
end;
else S := S + mDisplay[I];
end
else case mDisplay[I] of
'#', '''': begin
if S <> '' then Result := Result + Chr(StrToIntDef(S, 0));
S := '';
B := mDisplay[I] = '''';
end;
'$', '0'..'9', 'a'..'f', 'A'..'F': S := S + mDisplay[I];
end;
if (not B) and (S <> '') then Result := Result + Chr(StrToIntDef(S, 0));
end;function TForm1.StringToDisplay(mString: string): string;
var
I: Integer;
S: string;
begin
Result := '';
S := '';
for I := 1 to Length(mString) do
  if mString[I] in [#32..#127] then
      S := S + mString[I]
  else begin
      if S <> '' then
      begin
          Result := Result + QuotedStr(S);
          S := '';
      end;
      Result := Result + Format('#$%x', [Ord(mString[I])]);
      end;
if S <> '' then Result := Result + QuotedStr(S);
end;function TForm1.StringEncrypt(mStr: string; mKey: string): string;
var
I, J: Integer;
begin
J := 1;
Result := '';
for I := 1 to Length(mStr) do
begin
Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
if J + 1 <= Length(mKey) then
Inc(J)
else J := 1;
end;
end;procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
RzEdit2.Text:=StringToDisplay(StringEncrypt(RzEdit1.Text, 'pfschl'))
end;上面的代码我也是网上找的
看不大懂能不能帮我解释一下上面的代码:)
谢谢先~~~

解决方案 »

  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
      if Src = '' then
      begin
        result := '';
        exit;
      end;  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
      if Src = '' then
      begin
        result := '';
        exit;
      end;  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.   

    格式化String就可以了例如:IntToHex(Ord(Ch), 2);这就只能出现0-9,A-F的字母了http://lysoft.7u7.net
      

  3.   

    to : helloqiner(小勤)
    谢谢
    能不能给些注解
    看不大懂的说~~~
      

  4.   

    RSA(128、256、512、1024位)、DSA、GlGamal、BlowFish、TwoFish、DES、3DES、BASE64、AES(128、192、256位)、IDEA、TEA、RC2、RC5、RC6、MD2、MD4、MD5、SHA(128、256、384、512位)、HAVAL(128、160、192、224、256位)、GOST、TIGER(128、160、192位)、RIPEMD(128、160位)、CRC32、CRC32B、ADLER32;算法去www.ksaiy.com下吧.昏了。那个帖子已经个了完整一个加密过程了。