Python模数结果与wolfram alpha不同?

Asb*_*ion 8 python cryptography rsa modulo wolframalpha

当我运行我的python 3程序时:

exp = 211
p = 199
q = 337

d = (exp ** (-1)) % ((p - 1)*(q - 1))
Run Code Online (Sandbox Code Playgroud)

结果为211 ^( - 1).

但是当我在wolfram alpha中运行计算时,我得到了我期待的结果.

我做了一些测试输出和变量exp,p并且q在程序中是我在wolfram alpha中使用的所有整数值.

我的目标是从(弱)加密的整数中导出私钥.如果我测试我的wolfram alpha结果,我可以正确解密加密的消息.

Ale*_*ley 11

Wolfram Alpha正在计算模块化逆.也就是说,它找到了x这样的整数

exp*x == 1 mod (p - 1)*(q - 1)
Run Code Online (Sandbox Code Playgroud)

这与模运算符不同%.在这里,Python只是在给出问题中的表达式时1/exp除以得到的余数(p - 1)*(q - 1).

这个答案中复制Python代码,您也可以使用Python计算所需的值:

>>> modinv(exp, (p - 1)*(q - 1))
45403
Run Code Online (Sandbox Code Playgroud)


use*_*ica 5

Wolfram Alpha没有明确定义的语法.它需要您提供的任意文本,并尝试找出您输入的含义.在这种情况下,它决定你可能正在寻找模块化逆,它给了你一个.

Python具有明确定义的语法.在Python中,解析器不会**%它们放在一起并猜测该组合使得两个运算符具有除了它们通常含义之外的含义.该**计算通常的方式,然后%是求余运算.如果你想要一个模块化的反转,你必须自己写一个.