/// <summary>
/// 加密 Cookie字符串
/// </summary>
/// <param name="cookie">需要加密的cookie字符串</param>
/// <param name="type"></param>
/// <returns>加密过的cookie字符串</returns>
public static string EncryptCookie(string cookie,int type)
{
string str = En(cookie,type);
StringBuilder sb = new StringBuilder();
foreach(char a in str)
{
sb.Append(Convert.ToString(a,16).PadLeft(4,'0'));
}
return sb.ToString();
}
private static string En(string cookie,int type)
{
string str;
if(type % 2==0)
{
str = Transform1(cookie);
}
else
{
str = Transform3(cookie);
}
str = Transform2(cookie);
return str;
}
/// <summary>
/// 解密Cookie字符串
/// </summary>
/// <param name="cookie">需要解密的cookie字符串</param>
/// <param name="type"></param>
/// <returns>解密后的cookie字符串</returns>
public static string DecryptCookie(string cookie,int type)
{
StringBuilder sb = new StringBuilder();
string [] strarr = new String[255];
int i,j,count = cookie.Length/4;
string strTmp;
for(i = 0;i<count;i++)
{
for(j = 0;j<4;j++)
{
sb.Append(cookie.Substring(i*4+j,1));
}
strarr[i] = sb.ToString();
sb.Remove(0,sb.Length);
}
for(i = 0;i<count;i++)
{
strTmp = uint.Parse(strarr[i],System.Globalization.NumberStyles.AllowHexSpecifier).ToString("D");
char ch = (char)uint.Parse(strTmp);
sb.Append(ch);
}
return De(sb.ToString(),type);
}
private static string De(string cookie,int type)
{
string str;
if(type % 2==0)
{
str = DeTransform1(cookie);
}
else
{
str = DeTransform3(cookie);
}
str = Transform2(cookie);
return str;
}
public static string Transform1(string str)
{
int i=0;
StringBuilder sb = new StringBuilder();
foreach(char a in str)
{
switch(i % 6)
{
case 0:
sb.Append((char)(a+1));
break;
case 1:
sb.Append((char)(a+5));
break;
case 2:
sb.Append((char)(a+7));
break;
case 3:
sb.Append((char)(a+2));
break;
case 4:
sb.Append((char)(a+4));
break;
case 5:
sb.Append((char)(a+9));
break;
}
i++;
}
return sb.ToString();
}
public static string Transform2(string str)
{
uint j=0;
StringBuilder sb = new StringBuilder();
str=Reverse(str);
foreach(char a in str)
{
j=a;
if(j>255)
{
j=(uint)((a>>8) + ((a&0x0ff)<<8));
}
else
{
j=(uint)((a>>4) + ((a&0x0f)<<4));
}
sb.Append((char)j);
}
return sb.ToString();
}
public static string Transform3(string str)
{
int i=0;
StringBuilder sb = new StringBuilder();
foreach(char a in str)
{
switch(i % 6)
{
case 0:
sb.Append((char)(a+3));
break;
case 1:
sb.Append((char)(a+6));
break;
case 2:
sb.Append((char)(a+8));
break;
case 3:
sb.Append((char)(a+7));
break;
case 4:
sb.Append((char)(a+5));
break;
case 5:
sb.Append((char)(a+2));
break;
}
i++;
}
return sb.ToString();
}
public static string DeTransform1(string str)
{
int i=0;
StringBuilder sb = new StringBuilder();
foreach(char a in str)
{
switch(i % 6)
{
case 0:
sb.Append((char)(a-1));
break;
case 1:
sb.Append((char)(a-5));
break;
case 2:
sb.Append((char)(a-7));
break;
case 3:
sb.Append((char)(a-2));
break;
case 4:
sb.Append((char)(a-4));
break;
case 5:
sb.Append((char)(a-9));
break;
}
i++;
}
return sb.ToString();
}
public static string DeTransform3(string str)
{
int i=0;
StringBuilder sb = new StringBuilder();
foreach(char a in str)
{
switch(i % 6)
{
case 0:
sb.Append((char)(a-3));
break;
case 1:
sb.Append((char)(a-6));
break;
case 2:
sb.Append((char)(a-8));
break;
case 3:
sb.Append((char)(a-7));
break;
case 4:
sb.Append((char)(a-5));
break;
case 5:
sb.Append((char)(a-2));
break;
}
i++;
}
return sb.ToString();
}
public static string Reverse(string str)
{
int i;
StringBuilder sb = new StringBuilder();
for(i=str.Length-1;i>=0;i--)
{
sb.Append(str[i]);
}
return sb.ToString();
}
浙公网安备 33010602011771号