[英]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。
我試圖研究一種解決這個問題的策略,發現使用不同於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 ,但顯然pow(x,y,z)
) 存在 3 參數限制或操作數pow(x,y,z)
.
如何計算 Python 中的數學公式?
很容易:只需將兩者相乘,然后做一個顯式的 mod:
>>> p = 262643
>>> pow(15653, -3632, p)
86669
>>> 86669 * 923 % p
152015
完畢!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.