当我运行python 3程序时:
exp = 211
p = 199
q = 337
d = (exp ** (-1)) % ((p - 1)*(q - 1))
结果211^(-1)。
但是当我运行wolframα的计算时,我得到了我期望的结果。
我做了一些测试输出,程序中的变量exp
、p
和q
都是我在wolfram中使用的整数值。
我的目标是从(弱)加密整数派生私钥。如果我测试我的wolfram结果,我可以正确地解密加密的消息。
发布于 2015-11-23 11:52:44
Wolfram正在计算https://en.wikipedia.org/wiki/Modular_multiplicative_inverse。也就是说,它正在寻找整数x
,这样
exp*x == 1 mod (p - 1)*(q - 1)
这与模运算符%
不一样。这里,当给定问题中的表达式时,当1/exp
除以(p - 1)*(q - 1)
时,Python只是简单地计算余数。
从这个答案复制Python代码,也可以用Python计算所需的值:
>>> modinv(exp, (p - 1)*(q - 1))
45403
发布于 2015-11-23 11:54:38
Wolfram没有定义良好的语法。它需要你提供的任意文本,并试图弄清楚你的输入是什么意思。在这种情况下,它决定你可能在寻找一个模逆,它给了你一个。
Python具有定义良好的语法。在Python中,解析器不会将**
和%
放在一起,并猜测这种组合使这两个操作符的含义不同于它们通常的含义。**
按通常的方法计算,然后%
是模运算符。如果你想要一个模逆,你必须自己写一个。
发布于 2015-11-23 11:53:34
我认为这里的想法是wolfram和python对模块化操作的定义是不同的,这取决于您处理的是整数还是实数。在本例中,Wolfram使用模逆,因为它检测到第一个数字为0
关于实数这里定义的更多信息
https://stackoverflow.com/questions/33879279
复制相似问题