3

场景如下:我被要求在 Javascript 中实现一个解密算法来解密一个使用 RSA 编码的字符串,其算法如下:

  1. 将字符串转换为整数列表(4 个字符转换为 1 个整数),我们将此列表称为 u[]。
  2. 将此操作应用于 u[] 中的所有元素:e[i] = RSA((u[i]-e[i-1]) mod n), e[-1] = 0
  3. 然后我们得到加密的整数列表 e[]。

步骤 2 的文字描述:我们加密第一个元素,从第二个元素中减去加密的第一个元素。然后我们做(模n)然后加密结果。对于其余的数字,该过程继续进行。

现在的问题是解密部分。我已经被困在这部分好几个小时了!

我处理了这个方程,目的是让 u[n] 成为主题:

e[i] = RSA((u[i]-e[i-1]) mod n) -- (1)

我们知道:

RSA(x) = x^e mod n -- (2) 
RSA'(x) = x^d mod n -- (3)

所以,从(1)和(3)

RSA'(e[i]) = (u[i]-e[i-1]) mod n
RSA'(e[i]) + k*i + e[i-1] = u[i]

然后我有点卡住了,因为我们不知道 k。

所以,我又试了一次:

RSA'(e[i]) = (u[i]-e[i-1]) mod n
(e[i])^d mod n = (u[i]-e[i-1]) mod n

这似乎也无处可去......

4

1 回答 1

0

第二步没有多大意义,不应该是:

e[i] = RSA((u[i]-e[i-1]) mod n), e[-1] = 0

也就是说,模量与指数无关。这没有多大意义,因为要得到e[0]你必须计算模0的东西(除以零同样荒谬),而且e[1]你必须计算模1的东西,结果总是0。

此外,如果n是 RSA 模数,对于您拥有的纯文本0 <= u[i] < n。这意味着反向的第二步只是

u[i] = (RSA'(e[i]) + e[i-1]) mod n
于 2013-09-13T07:04:36.483 回答