Python: 用于 El Gamal 解密的大浮点运算
Python: Large float arithmetic for El Gamal decryption
上下文
El Gamal方法的解密数学公式如下:
m = ab^(-k) mod p
特别是在 Python 中,我想计算以下等价物:
>>> m = (b**(-k) * a) % p
上述 Python 代码中的问题在于,由于精度原因,插入的数字会溢出或导致 0.0。考虑以下示例:
>>> (15653**(-3632) * 923) % 262643
0.0
上述示例的预期答案是 152015。
更多示例
尝试
我试图研究一种策略来处理这个问题,发现使用 Python 的默认 pow(x,y,z),它不同于 math.pow(),可以提供帮助。
pow(x,y,z) 等价于 x**y % z
但是,我无法使用pow(x,y,z)
。我尝试使用 pow(15653, -3632, 262643),但我无法将 pow(15653, -3632) 的结果乘以 923然后,作为最后一步,mod by 262643.
换句话说,我尝试执行 (x**y * a ) % z[= 而不是 x**y % z 51=],但显然有一个 3 参数限制或来自 pow(x,y,z)
的操作数。
如何计算 Python 中的数学公式?
非常简单:只需将两者相乘,然后显式计算 mod:
>>> p = 262643
>>> pow(15653, -3632, p)
86669
>>> 86669 * 923 % p
152015
完成!
上下文
El Gamal方法的解密数学公式如下:
m = ab^(-k) mod p
特别是在 Python 中,我想计算以下等价物:
>>> m = (b**(-k) * a) % p
上述 Python 代码中的问题在于,由于精度原因,插入的数字会溢出或导致 0.0。考虑以下示例:
>>> (15653**(-3632) * 923) % 262643
0.0
上述示例的预期答案是 152015。
更多示例
尝试
我试图研究一种策略来处理这个问题,发现使用 Python 的默认 pow(x,y,z),它不同于 math.pow(),可以提供帮助。
pow(x,y,z) 等价于 x**y % z
但是,我无法使用pow(x,y,z)
。我尝试使用 pow(15653, -3632, 262643),但我无法将 pow(15653, -3632) 的结果乘以 923然后,作为最后一步,mod by 262643.
换句话说,我尝试执行 (x**y * a ) % z[= 而不是 x**y % z 51=],但显然有一个 3 参数限制或来自 pow(x,y,z)
的操作数。
如何计算 Python 中的数学公式?
非常简单:只需将两者相乘,然后显式计算 mod:
>>> p = 262643
>>> pow(15653, -3632, p)
86669
>>> 86669 * 923 % p
152015
完成!