function Encrypt(Value: String; const PSW: String; Flag: Boolean): String; overload
var
  Data: String;
  i: Integer;
  p: PChar;
begin
  Result := '';
  if Flag then begin 
    if Length(Value) = 0 then Exit;
    SetLength(Data,Length(Value)); StrCopy(PChar(Data),PChar(Value));
    Encrypt(PChar(Data),Length(Data),PSW); p := PChar(Data);
    for i := 0 to Length(Data) - 1 do
      Result := Result + IntToHex(Byte(Char((p+i)^)),2);
  end else begin
    p := PChar(Value);
    for i := 0 to Length(Value) - 1 do
      if not ((p + i)^ in ['0'..'9','A'..'F']) then Exit;
    for i := 1 to Length(Value) div 2 do
      Result := Result + Char(StrToInt('0x' + Copy(Value,i*2-1,2)));
    Encrypt(PChar(Result),Length(Result),PSW);
  end;
end;procedure Encrypt(Value: PChar; Size: Integer; const PSW: String); overload;
var
  i,l: Integer; w: PChar;
  procedure E(ic: PChar; pc: Char); begin ic^ := Char(Byte((ic^)) xor Byte(pc)); end;
begin
  w := PChar(PSW); l := Length(PSW);
  for i := 0 to Size - 1 do E((Value + i),(w + (i mod l))^);
end;

解决方案 »

  1.   

    using System;
    using System.Web;
    using System.Web.UI;namespace WebTools
    {
        /// <summary>
        /// Encrypt 的摘要说明。
        /// </summary>
        public unsafe class StrEncrypt
        {        public unsafe string Encrypt(string Value,string PSW,bool Flag)
            {
                string Data;
                string sEnd;
                int i;
                char p;
                if (Flag == true)
                {
                    if (Value.Length == 0)  {return "";}
                    Data = Value;
                    Encrypt1(Data.ToCharArray(),Data.Length,PSW);
                    for (i = 0;i<Data.Length;i++)
                    {
                        sEnd = sEnd + Hex((byte)(char)(*(p + i)));
                    }
                }
                else
                {
                    p = Value.ToCharArray();
                    for (i = 0;i<Value.Length;i++)
                    {
                        char q = *(p + i);
                        if (! (((q.ToString() < "9") & (q.ToString() > "0")) ^ ((q.ToString() >= "A") & (q.ToString() <= "F"))) )
                        {
                            return "";
                        }
                    }
                    for (i = 1;(int)(Value.Length / 2);i++)
                    {
                        sEnd = sEnd + (Value.Substring(i*2-1,2).ToString("x")).ToCharArray();
                    }
                    Encrypt1(sEnd.ToCharArray(),sEnd.Length,PSW);
                }
                return sEnd;
                            
            }        private unsafe void Encrypt1(char Value, int Size, string PSW)
            {
                int i,l;
                char [] w = PSW.ToCharArray();
                l = PSW.Length;
                for (i = 0;i< Size;i++)
                {
                    E((Value + i),*(w + (i % l)));
                }
            }        private unsafe void E(char ic,char pc)
            {
                *ic = ((char)((byte)(*ic)) | (byte)(pc));
            }    }
    }D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(23): 与“WebTools.StrEncrypt.Encrypt1(char, int, string)”最匹配的重载方法具有一些无效参数
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(23): 参数“1” : 无法从“char[]”转换为“char”
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(26): * 或 -> 运算符只能应用于指针
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(31): 无法将类型“char[]”隐式转换为“char”
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(34): * 或 -> 运算符只能应用于指针
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(35): 运算符“<”无法应用于“string”和“string”类型的操作数
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(40): 无法将类型“int”隐式转换为“bool”
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(42): 与“string.ToString(System.IFormatProvider)”最匹配的重载方法具有一些无效参数
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(42): 参数“1” : 无法从“string”转换为“System.IFormatProvider”
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(44): 与“WebTools.StrEncrypt.Encrypt1(char, int, string)”最匹配的重载方法具有一些无效参数
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(44): 参数“1” : 无法从“char[]”转换为“char”
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(57): 运算符“+”无法应用于“char[]”和“int”类型的操作数
    D:\Inetpub\wwwroot\Business\WebTools\StrEncrypt.cs(63): * 或 -> 运算符只能应用于指针
      

  2.   

    判断charVal存不存在于数组{"0","1","2","3","4","5","6","7","8","9"}中的表达式应该如何写?