0

语境

El Gamal 方法的解密数学公式如下:

m = ab^(-k) mod p

特别是在 Python 中,我想计算以下等价物:

>>> m = (b**(-k) * a) % p

上面 Python 代码中的问题是插入的数字会溢出或由于精度而导致 0.0。考虑以下示例:

>>> (15653**(-3632) * 923) % 262643
0.0

上述示例的预期答案是 152015。

更多示例

在此处输入图像描述

尝试

我试图研究一种解决这个问题的策略,发现使用不同于math.pow()的 Python 的默认pow(x,y,z)可以提供帮助。

pow(x,y,z)等价于x**y % z

但是,我不能使用pow(x,y,z). 我尝试使用pow(15653, -3632, 262643),但我不能将pow(15653, -3632)的结果乘以923,然后作为最后一步,将 mod 乘以 262643。

换句话说,我正在尝试执行(x**y * a ) % z而不是x**y % z ,但显然存在 3 参数限制或操作数。pow(x,y,z)

我可以做些什么来计算 Python 中的数学公式?

4

1 回答 1

2

很容易:只需将两者相乘,然后做一个显式的 mod:

>>> p = 262643
>>> pow(15653, -3632, p)
86669
>>> 86669 * 923 % p
152015

完毕!

于 2021-12-12T18:30:07.267 回答