簡體   English   中英

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。

更多示例

在此處輸入圖像描述

嘗試

我試圖研究一種解決這個問題的策略,發現使用不同於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM