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;
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;
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): * 或 -> 运算符只能应用于指针