使用RSA解密字符串

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

那似乎也没有任何进展...


谁告诉人们要实现如此明显破碎的加密?ARGHHHH - CodesInChaos
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

什么是n?如果n是RSA模数,假设所有算术都是模n的并不是不合理的。 - Joni
是的,我正在使用您的符号表示法。u[i] 只是被定义为“4个字符对应1个整数”。如果他的意思是位串联,我不明白为什么您会认为它是模 n... - rliu
抱歉!我混淆了我的索引!我已经修正了问题! - Eric Han
嗯...它运行了!但是我不太明白唯一取模部分!你能给我指点一些阅读材料,这样我就能更好地理解吗?谢谢!:D - Eric Han
我的意思是,对于一个普通的文本块 u[i],可能会有 n 种加密结果。如果 u[i] 可以取多于 n 个值,根据鸽巢原理,至少有两个值被加密为相同的密文,这时就无法知道哪个是原始值:你只能找到 u[i] mod n - Joni
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接