最近没事看了一个朋友写的用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));
}
解决方案 »
- asp.net使用jmail接收外部邮件
- 请教个泛型类的问题
- 关于windows窗体任务栏的问题(高手指教下)
- c#如何实现IIS伪静态
- 我想让listview慢慢的拉长,就是改变它的hight属性,可是提示不是变量,不能修改?
- 在C#中如何对Excel单元格设置背景色以及对Range设边框
- 老问题有关web打印!
- 紧急,二进制数据,存储到数据库中就不一样了,高手看看问题何在!!!
- 一个关闭窗体的问题,请各位指教
- 属性框的快捷键是什么?如vb中的Ctrl+SHIFT+你要选的属性名首字母!
- DataGridView数据输入处理 急!!
- C#中获取每个name的内容,不用JS完成,得到结果如下:10CRM,CDCEE,IEP.....求大神帮帮忙
{
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));
}