最近没事看了一个朋友写的用C#加密中文的小算法,他让我尝试去写他的加密算法,他把解密算法给我看了下,可不知道怎么下手,对于位运算不熟悉,特此来请教一下,这个小算法为了保护程序中的中文被恶意修改,把代码贴出来大家看看
两个参数,第一个参数为加密的中文字符串,第二个为一个int类型的数值,算法中要根据这个数值去解密,类似KEY,但是简化了而已,高手帮忙看看下,另外给个例子,例如:"笹" 解密就可以得到 "提示"这中文 private string a(string arg1, int arg2)
{
char[] array = arg1.ToCharArray();
int num = 2031709749 + arg2;
int i = 0;
while (i < array.Length)
{
byte b1 = (byte)((int)(array[i] & 'ÿ') ^ num++);
byte b2 = (byte)((int)((int)array[i] >> 8) ^ num++);
byte temp = b2;
b2 = b1;
b1 = temp;
array[i] = (char)((int)b2 << 8 | b1);
i++;
}
return string.Intern(new string(array));
}
两个参数,第一个参数为加密的中文字符串,第二个为一个int类型的数值,算法中要根据这个数值去解密,类似KEY,但是简化了而已,高手帮忙看看下,另外给个例子,例如:"笹" 解密就可以得到 "提示"这中文 private string a(string arg1, int arg2)
{
char[] array = arg1.ToCharArray();
int num = 2031709749 + arg2;
int i = 0;
while (i < array.Length)
{
byte b1 = (byte)((int)(array[i] & 'ÿ') ^ num++);
byte b2 = (byte)((int)((int)array[i] >> 8) ^ num++);
byte temp = b2;
b2 = b1;
b1 = temp;
array[i] = (char)((int)b2 << 8 | b1);
i++;
}
return string.Intern(new string(array));
}
{
char[] array = arg1.ToCharArray();
int num = 2031709749 + arg2;
int i = 0;
while (i < array.Length)
{
byte b1 = (byte)((int)(array[i] & 'ÿ'));
byte b2 = (byte)((int)((int)array[i] >> 8));
byte temp = b2;
b2 = b1;
b1 = temp;
b1 = (byte)(b1 ^ num++);
b2 = (byte)(b2 ^ num++);
array[i] = (char)((int)b2 << 8 | b1);
i++;
}
return string.Intern(new string(array));
}
{
char[] array = arg1.ToCharArray();
int num = 2031709749 + arg2;
int i = 0;
while (i < array.Length)
{
byte b1 = (byte)((int)(array[i] & 'ÿ') ^ num++);//‘ÿ’=0xFF,这里是取低8位进行异或运算。
byte b2 = (byte)((int)((int)array[i] >> 8) ^ num++);//转int,右移8位,即取高8位进行运算。
byte temp = b2;
b2 = b1;
b1 = temp;
//交换高低位
array[i] = (char)((int)b2 << 8 | b1);//组合高低位
i++;
}
return string.Intern(new string(array));
}
private static string decrypt(string arg1,int arg2)
{
char[] array = arg1.ToCharArray();
int num = 2031709749 + arg2;
int i = 0;
while (i < array.Length)
{
byte b1 = (byte)((int)(array[i] & 'ÿ'));//取出低8位
byte b2 = (byte)((int)((int)array[i] >> 8));//取出高8位
byte temp = b2;
b2 = b1;
b1 = temp;
//交换高低位
b1 = (byte)(b1 ^ num++);//低8位先进行异或
b2 = (byte)(b2 ^ num++);//高8位进行异或
array[i] = (char)((int)b2 << 8 | b1);//组合高低位
i++;
}
return string.Intern(new string(array));
}