如何用python计算大数?

曼多克

我目前正在尝试查找x的值,

x = (math.log(X) - math.log(math.fabs(p))/math.log(g))

与:

X = 53710695204323513509337733909021562547350740845028323195225592059762435955297110591848019878050853425581981564064692996024279718640577281681757923541806197728862534268310235863990001242041406600195234734872865710114622767319497082014412908147635982838670976889326329911714511434374891326542317244606912177994106645736126820796903212224

p = 79293686916250308867562846577205340336400039290615139607865873515636529820700152685808430350565795397930362488139681935988728405965018046160143856932183271822052154707966219579166490625165957544852172686883789422725879425460374250873493847078682057057098206096021890926255094441718327491846721928463078710174998090939469826268390010887

g = 73114111352295288774462814798129374078459933691513097211327217058892903294045760490674069858786617415857709128629468431860886481058309114786300536376329001946020422132220459480052973446624920516819751293995944131953830388015948998083956038870701901293308432733590605162069671909743966331031815478333541613484527212362582446507824584241

不幸的是,python本身无法处理这么大的数字。

有人知道解决这个问题的方法吗?

感谢您的帮助。


编辑

由于很多您想知道我正在尝试做什么:

为了能够以安全的方式进行通信,Alice和Bob进行了Diffie-Hellman密钥交换。为此,他们使用质数p:

p = 79293686916250308867562846577205340336400039290615139607865873515636529820700152685808430350565795397930362488139681935988728405965018046160143856932183271822052154707966219579166490625165957544852172686883789422725879425460374250873493847078682057057098206096021890926255094441718327491846721928463078710174998090939469826268390010887

和整数g:

g = 73114111352295288774462814798129374078459933691513097211327217058892903294045760490674069858786617415857709128629468431860886481058309114786300536376329001946020422132220459480052973446624920516819751293995944131953830388015948998083956038870701901293308432733590605162069671909743966331031815478333541613484527212362582446507824584241

爱丽丝选择了秘密数字x,她计算出X = g ^ x mod p并通过一个不安全的信道将X发送给鲍勃。鲍勃选择了秘密编号y,他计算出Y = g ^ y mod p,并通过同一不安全的通道将Y发送给爱丽丝。两者都可以计算出值Z = X ^ y = Y ^ x = g ^ xy mod p

通过监视频道,查理检索X和Y的值:

X = 53710695204323513509337733909021562547350740845028323195225592059762435955297110591848019878050853425581981564064692996024279718640577281681757923541806197728862534268310235863990001242041406600195234734872865710114622767319497082014412908147635982838670976889326329911714511434374891326542317244606912177994106645736126820796903212224

Y = 17548462742338155551984429588008385864428920973169847389730563268852776421819130212521059041463390276608317951678117988955994615505741640680466539914477079796678963391138192241654905635203691784507184457129586853997459084075350611422541722123509121359133932497700621300814065254996649070135358792927275914472632707420292830992294921992

此练习的关键是Z值的md5sum

彼得·德里瓦兹

您可以使用Decimal库执行此操作:

from decimal import Decimal

X = 53710695204323513509337733909021562547350740845028323195225592059762435955297110591848019878050853425581981564064692996024279718640577281681757923541806197728862534268310235863990001242041406600195234734872865710114622767319497082014412908147635982838670976889326329911714511434374891326542317244606912177994106645736126820796903212224
p = 79293686916250308867562846577205340336400039290615139607865873515636529820700152685808430350565795397930362488139681935988728405965018046160143856932183271822052154707966219579166490625165957544852172686883789422725879425460374250873493847078682057057098206096021890926255094441718327491846721928463078710174998090939469826268390010887
g = 73114111352295288774462814798129374078459933691513097211327217058892903294045760490674069858786617415857709128629468431860886481058309114786300536376329001946020422132220459480052973446624920516819751293995944131953830388015948998083956038870701901293308432733590605162069671909743966331031815478333541613484527212362582446507824584241
X=Decimal(X)
p=Decimal(p)
g=Decimal(g)

print X.ln() - abs(p).ln()/g.ln()

769.7443428855116199351294830

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在python大数计算中抑制科学计数法

来自分类Dev

如何用Python计算Coxeter组的简化词?

来自分类Dev

如何用python计算一些数据?

来自分类Dev

如何用sympy计算argmax?

来自分类Dev

如何用sympy计算argmax?

来自分类Dev

如何用逗号计算金额

来自分类Dev

如何计算给定的大数阶乘方程?

来自分类Dev

如何用JavaScript格式化大数字?

来自分类Dev

如何用 R^2 绘制大数据矩阵的相关图?

来自分类Dev

如何用熊猫计算组元素的数量

来自分类Dev

如何用键计算数组值

来自分类Dev

如何用ng-repeat计算Total

来自分类Dev

如何用Java计算结果?

来自分类Dev

如何用矩阵进行指数计算?

来自分类Dev

如何用angular和php计算?

来自分类Dev

如何用位域计算结构的大小?

来自分类Dev

如何用r计算日期差

来自分类Dev

如何用NaN值计算熊猫的时差

来自分类Dev

如何用矩阵进行指数计算?

来自分类Dev

如何用预先计算的分位数ggplot?

来自分类Dev

如何用bash计算流程实例的数量?

来自分类Dev

如何用特定的线进行计算?

来自分类Dev

如何用angular和php计算?

来自分类Dev

如何用Java计算数据

来自分类Dev

如何用scapy计算丢包率?

来自分类Dev

如何用sqlite计算Jaccard相似系数

来自分类Dev

如何用Python替换bash?

来自分类Dev

如何在MATLAB中计算最大数组尺寸?

来自分类Dev

如何在Java中计算和显示大数