Merkle Hellman背负式密码系统

时间:2012-02-05 06:45:53

标签: encryption

我正在研究一个实现Merkle Hellman的背包的java问题。维基百科页面为http://en.wikipedia.org/wiki/Merkle%E2%80%93Hellman_knapsack_cryptosystem

使用一些简单的样本数据进行测试后,其中一些是成功的,而另一些则不是。例如, input ='f'; (01100110)

加密:

w = ( 1,2,4,7,12,20,33,54)

r = 147 

q = 250

b = (147,44,88,29,14,190,101,188)

r-1(reverse) = 233    (r*r-1 mod q =1)

The cryptogram is therefore 423 (=44+88+190+101)

Decryption:

Then 423 * 233 mod 250 = 59

59-54=5
5-4=1
1-1=0

结果是10100001.但它错了!

我已经多次检查过,但是找不到我的流程哪个步骤有问题。另外,我知道我使用的数字应该是随机的。在这里,我只想举个例子。

有人可以对此有所了解吗?

非常感谢!

2 个答案:

答案 0 :(得分:6)

你的w不是超级增长。

答案 1 :(得分:0)

为了使输出正确无误,必须遵循Merkle-Hellman的条件,以下是这些条件:

  1. 简单的背包一定要超级大
  2. 权重(乘数)的值必须大于简单背包的总和
  3. 模量和重量值不能有公因数