问题描述
最近没事看了一个朋友写的用C#加密中文的小算法,他让我尝试去写他的加密算法,他把解密算法给我看了下,可不知道怎么下手,对于位运算不熟悉,特此来请教一下,这个小算法为了保护程序中的中文被恶意修改,把代码贴出来大家看看两个参数,第一个参数为加密的中文字符串,第二个为一个int类型的数值,算法中要根据这个数值去解密,类似KEY,但是简化了而已,高手帮忙看看下,另外给个例子,例如:"笹"解密就可以得到"提示"这中文privatestringa(stringarg1,intarg2){char[]array=arg1.ToCharArray();intnum=2031709749+arg2;inti=0;while(i<array.Length){byteb1=(byte)((int)(array[i]&'ÿ')^num++);byteb2=(byte)((int)((int)array[i]>>8)^num++);bytetemp=b2;b2=b1;b1=temp;array[i]=(char)((int)b2<<8|b1);i++;}returnstring.Intern(newstring(array));}
解决方案
解决方案二:
看看先~
解决方案三:
初步看到这个函数,有一个常量数值2031709749,第一想到的应该是中文的编码之类的东西,只是不知道其原理是怎么计算出着两个参数b1和b2,而且这两个参数(b2<<8|b1)刚好得到这个中文字符
解决方案四:
调整一下位置就可以。只有xor运算是核心。privatestaticstringdecrypt(stringarg1,intarg2){char[]array=arg1.ToCharArray();intnum=2031709749+arg2;inti=0;while(i<array.Length){byteb1=(byte)((int)(array[i]&'ÿ'));byteb2=(byte)((int)((int)array[i]>>8));bytetemp=b2;b2=b1;b1=temp;b1=(byte)(b1^num++);b2=(byte)(b2^num++);array[i]=(char)((int)b2<<8|b1);i++;}returnstring.Intern(newstring(array));}
解决方案五:
我刚想到一种笨方法不过还没测试不知道行不行可能你说的这种是比较简化的我用你的方法测试看看这核心我不是一下能看懂可能对算法的位运算这些不熟悉
解决方案六:
测试了可以的哦,谢谢了,不过我还要琢磨一下这原理,你是怎么看出来核心是异或计算呢,然后只调整一下位置就可以了呢,现在看似乎这很简单了呀,不过没搞明白原理,我用笨方法反推回去还是很费事,而且不一定行得通
解决方案七:
注释;加密改了个名字好看懂点privatestaticstringencrypt(stringarg1,intarg2){char[]array=arg1.ToCharArray();intnum=2031709749+arg2;inti=0;while(i<array.Length){byteb1=(byte)((int)(array[i]&'ÿ')^num++);//‘ÿ’=0xFF,这里是取低8位进行异或运算。byteb2=(byte)((int)((int)array[i]>>8)^num++);//转int,右移8位,即取高8位进行运算。bytetemp=b2;b2=b1;b1=temp;//交换高低位array[i]=(char)((int)b2<<8|b1);//组合高低位i++;}returnstring.Intern(newstring(array));}privatestaticstringdecrypt(stringarg1,intarg2){char[]array=arg1.ToCharArray();intnum=2031709749+arg2;inti=0;while(i<array.Length){byteb1=(byte)((int)(array[i]&'ÿ'));//取出低8位byteb2=(byte)((int)((int)array[i]>>8));//取出高8位bytetemp=b2;b2=b1;b1=temp;//交换高低位b1=(byte)(b1^num++);//低8位先进行异或b2=(byte)(b2^num++);//高8位进行异或array[i]=(char)((int)b2<<8|b1);//组合高低位i++;}returnstring.Intern(newstring(array));}
解决方案八:
非常的感谢这位朋友,看了你的注释,我明白许多了,另外那方法名是摘过来的,不符合命名规则,还有里面的变量也一样,我们不是很专业,谢谢指点了。
解决方案九:
留名收藏下!
解决方案十:
该回复于2012-06-07 10:36:25被版主删除
解决方案十一:
该回复于2012-06-07 10:36:25被版主删除