Merkle-Hellman背包算法

转自:http://baike.baidu.com/view/3416519.htm

 

 

1977年,Merkle与Hellman合作设计了使用背包问题实现信息加密的方法。其工作原理是:假定甲想加密,则先产生一个较易求解的背包问题,并用它的解作为专用密钥;然后从这个问题出发,生成另一个难解的背包问题,并作为公共密钥。如果乙想向甲发送报文,乙就可以使用难解的背包问题对报文进行加密,由于这个问题十分难解,所以一般没有人能够破译密文;甲收到密文后,可以使用易解的专用密钥解密。

  但是,在它发表几年后,就找到了攻破它的方法。即使如此,它仍然代表着一类很难问题的算法。

分类

  背包加密分为加法背包和乘法背包。   1、加法背包:我们知道,1<2,1+2<4,1+2+4<8,1+2+4+8<16,……,那么如果我们选择这样一些数,这些数从小到大排列,如果前面所有的数加起来的值总小于后面的数,那么这些数就可以构成一个背包,我们给一个这个背包里面的某些数的和,这个数就是被加密的数,由这个背包组成这个数只有一种组合方式,这个方式就是秘密了,例如给大家一个封包(2,3,6,12,24,48),由这个背包里的某些数构成的数:86,你知道86怎么来的吗?当然,你看着背包里面的内容,可以知道是由2+12+24+48得到的,如果你没有这个背包,而是直接得到这个86,你知道组成这个86的最小的数是多少吗?你无法知道,因为加起来等于86的数非常多:85+1=86,82+2=86等等,你是无法知道的,所以,背包加密非常难破。   2、乘法背包:乘法背包比加法背包更复杂,不仅是运算量大了很多,更重要的是你得到的一个被加密了的数据更大,一般都是上亿的,而且在许多机密的机关里面,背包的数据都不是有这个单位,而是用位。我们知道,1<2,1+2<3,1*2*3<7,1*2*3*7<43,1*2*3*7*42<1683, 数字的增长还是很快的,之所以复杂,就是因为数字很大啊!背包的特点是:如果背包里面的数据按小到大排列,那么,前面所有数据的乘积小于后面的任何一个元素,这个就是背包的特点,是不是很简单,但是要知道乘积的数字的增长是非常快的!

破解方法

  背包加密是一中相当高级的加密方式,不容易破解,而且还原也相对容易,因此采用这种加密方式加密游戏数据也是非常好的,只要知道背包,就可以轻易算出来。   这么复杂的加密,怎么解密?有如下两中破解方法: 1.利用孤立点破解;2.利用背包破解。 所谓孤立点,还是以上面的背包为例子,我们可以把密码设为a,看看得到了什么密码?1,如果我们把密码设为b,得到的密码为2,同理,可以把背包里面的所有元素都利用孤立点的方法全部枚举出来,这样我们就把背包弄到手了,对下面的破解就不成问题了,是不是很简单?其实在加密的时候,也许它们回利用异或运算先加密一下,再利用背包加密,这样更难破,孤立点方法非常有效,但是不是万能的,要结合前面的方法配合使用! 利用背包,这个就简单了,想一想,要加密也的有背包才能完成加密啊,要解密也要背包啊,这就是说,不管是用户端,还是服务器端,都会有该背包的,找到该背包不是就解决问题了吗?怎么找?大家可以稍微找一些书籍学习一下。首先是要了解进制,特别是十六进制、二进制和十进制及其之间的转换。这些加密方法在大学应该会接触的。

应用领域

  很多数据都需要加密,例如银行的数据、网络游戏、军事机构、行政机构以及其他重要场所。不过虽然这种加密效果非常好,但是加密的程度太大也不现实,一般不会有非常复杂的加密,如果一个数据就几百位,而且还用非常规进制,那么可以想象电脑要算多久啊,会多么影响速度啊!

你可能感兴趣的:(游戏,算法,应用服务器,网络应用)