按byte串,偶数减去32,奇数减去31
或者自建一个对照表

解决方案 »

  1.   

    比较好的办法,通过Key加密。网上介绍不少。
    最好找两本书,系统地看看。
      

  2.   

    function TFrmRegister.EncryptString1(Source, Key: string): string;
    // 对字符串加密(Source:源 Key:密匙)
    var
      KeyLen: integer;
      KeyPos: integer;
      Offset: integer;
      Dest: string;
      i: integer;
      SrcAsc: integer;
      Range: integer;
    begin
      KeyLen := Length(Key);
      if KeyLen = 0 then
      KeyPos := 0;
      Range := 256;
      randomize;
      Offset := random(Range);
      //Offset:=174;
      Dest := format('%1.2x',[Offset]);
      for i := 1 to Length(Source) do
      begin
        SrcAsc := (Ord(Source[i]) + 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]);
        Dest := Dest + chr(SrcAsc);
        Offset := SrcAsc;
      end;
      result := Dest;
    end;function TFrmRegister.UnEncryptString1(Source, Key: string): string;
    // 对字符串解密(Src:源 Key:密匙)
    var
      KeyLen: integer;
      KeyPos: integer;
      Offset: integer;
      Dest: string;
      SrcPos: integer;
      SrcAsc: integer;
      TmpSrcAsc: integer;
    begin
      KeyLen := Length(Key);
      if KeyLen = 0 then
        KeyPos := 0;
      Offset := strtoint('$' + copy(Source, 1, 2));
      SrcPos := 3;
      repeat
        SrcAsc:=Ord(Source[SrcPos]);
        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 + 1;
      until
        SrcPos >= Length(Source);
      result := Dest;
    end;加密调用:EncryptString1(民用航空航天,'R&w^7h5#@61ahj#kd$tsw%');
    解密调用:UnEncryptString1后汉字有时候就会丢失,哪位高手帮忙看看,谢谢!
      

  3.   

    乱码的话,
    在xe 下注意string, ansistring 问题,多半由此引起.还有, 加密后还想解密的话,  并且小于原字符串长度的 , 基本不可能.
    加密后等长是可以的.