function TForm_Login.jmPass(str: string): string; 
var 
  m,str1: string; 
  asc,asc1: byte; 
  i: integer; 
begin 
  m :=  '\iklop;lk,kjjhh\ ';             
  for i:=1 to length(str) do 
  begin 
    asc := ord(str[i]); 
    asc := asc and $F; 
    asc1 := ord(m[i]); 
    asc1 := asc1 and $F; 
    asc1 := asc xor asc1; 
    asc := ord(str[i]); 
    asc := asc and $F0; 
    asc := asc + asc1; 
    str1 := str1 + chr(asc); 
  end; 
  result := str1; 
end;($F是二进制前四位改为0000)

解决方案 »

  1.   

    这个代码没有这样麻烦,这样写
    function jmPass1(str: string): string;
    var
      m: string;
      I: Integer;
    begin
      m := '\iklop;lk,kjjhh\  ';
      for I := 1 to Length(str) do
        Result := Result + Chr((Ord(str[i]) and $F0) or
          (Ord(str[i]) and $F) xor (ord(m[i]) and $F));
    end;参考如下代码:
    private string jmPass(string str)
    {
        string m = @"\iklop;lk,kjjhh\  ";
        byte[] vKeys = Encoding.Default.GetBytes(m);
        byte[] vBytes = Encoding.Default.GetBytes(str);
        byte[] vReturn = new byte[vBytes.Length];
        for (int i = 0; i < vBytes.Length; i++)
        {
            int j = vBytes[i];
            vReturn[i] = (byte)(((vBytes[i] & 0xF0) | (vBytes[i] & 0x0F)) ^ 
                (vKeys[i] & 0x0F));
        }
        return Encoding.Default.GetString(vReturn);
    }private void button1_Click(object sender, EventArgs e)
    {
        Text = jmPass("Zswang 路过");
    }