C#中文加密小算法反加密

问题描述

最近没事看了一个朋友写的用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被版主删除

时间: 2024-10-30 18:59:01

C#中文加密小算法反加密的相关文章

简介.Net框架下的各种加密解密算法

该文章将会不断的收入.net下的加密算法,这些算法将会采用策略模式来统一管理. using System; using System.Collections.Generic; using System.Text; namespace EncryptAndDecrypt { public class EncryptAndDecrytHandler { IEncrytAndDecrypt _EncryptAndDecrypt; public EncryptAndDecrytHandler(IEncr

java实现Base64加密解密算法_java

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.

一组PHP可逆加密解密算法实例代码

 这篇文章主要介绍了一组PHP可逆加密解密算法实例代码,有需要的朋友可以参考一下 对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密.   对于需要还原的信息,则需要采用可逆的加密解密算法.   下面一组PHP函数是实现此加密解密的方法:   加密算法如下: 代码如下: function encrypt($data, $key) {  $key = md5($key);     $x  = 0;     $len = strlen

一组PHP可逆加密解密算法实例代码_php实例

对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加密解密的方法: 加密算法如下: 复制代码 代码如下: function encrypt($data, $key){ $key = md5($key);    $x  = 0;    $len = strlen($data);    $l  = strlen($key);    for ($i = 0

详解.Net下的加密解密算法(6) 玩转非对称加密

本博文来聊聊怎么玩转非对称加密吧,这里主要介绍.NET算法下的3种非对称加密算法:DSA,RSA,ECDsa.上两篇博文分 别为Hash家族和非对称加密家族找到了lead,现在我们就为非对称加密技术找个合适的lead吧. 首先创建一个接口 :"IEncryptAndDecrypt",然后为上面的3中算法分别创建3个实现类并让这些类实现接口"IEncryptAndDecrypt".它们 的情况如下图: 这下我们把这些哥们都召集起来了,现在我们就给他们找一个lead:&

详解.NET下的加密解密算法(3) 非对称加密

本博文列出了.NET下常用的非对称加密算法,并将它们制作成小DEMO,希望能对大家有所帮助. RSA static string EnRSA(string data,string publickey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); byte[] cipherbytes; rsa.FromXmlString(publickey); cipherbytes = rsa.Encrypt(Encoding

PHP实现加密解密算法

PHP实现加密解密的算法,如下代码: <?php    class Mcrypt    {        /**        * 解密        *         * @param string $encryptedText 已加密字符串        * @param string $key  密钥        * @return string        */        public static function _decrypt($encryptedText,$key =

Java程序的反加密

首先我们来看看Java程序的反加密,也就是通常所说的Crack过程,只有明白了这个过程,我们才能有效的对我们的程序进行加密. 通常我们得到的Java程序的Crack包有两种,一种属于KeyGen(注册码生成器).一种属于替换修改: 我们先看第一种,当我们找到一个应用程序的KeyGen的时候我们总是很佩服那个做出KeyGen的人,觉得他很厉害,但是你仔细分析一下,为什么他能做出KeyGen呢?只有 他对这个Java程序的加密算法了解的非常清楚:这种人有哪些呢?一个是那个公司里面的人,那不可能,除非

详解.NET下的加密解密算法(2) 对称加密

本博文列出了.NET下常用的对称加密算法,并将它们制作成小DEMO,希望能对大家有所帮助. 公共代码 static byte[] CreateKey(int num) { byte[] result = new byte[num]; Random rand = new Random(); for (int i = 0; i < num; i++) { result[i] = (Byte)rand.Next(1, 256); } return result; } DES /// <summary