【发布时间】:2014-02-21 21:52:00
【问题描述】:
我目前正在尝试查找 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
Alice 选择秘密数字 x,她计算 X=g^x mod p 并通过不安全的通道将 X 发送给 Bob。 Bob 选择秘密数字 y,他计算 Y=g^y mod p 并通过相同的不安全通道将 Y 发送给 Alice。 两者都可以计算出值 Z = X^y = Y^x = g^xy mod p
通过窥探通道,Charlie 检索到 X 和 Y 的值:
X = 53710695204323513509337733909021562547350740845028323195225592059762435955297110591848019878050853425581981564064692996024279718640577281681757923541806197728862534268310235863990001242041406600195234734872865710114622767319497082014412908147635982838670976889326329911714511434374891326542317244606912177994106645736126820796903212224
Y = 17548462742338155551984429588008385864428920973169847389730563268852776421819130212521059041463390276608317951678117988955994615505741640680466539914477079796678963391138192241654905635203691784507184457129586853997459084075350611422541722123509121359133932497700621300814065254996649070135358792927275914472632707420292830992294921992
这个练习的关键是z的值的md5sum
【问题讨论】:
-
使用 Numpy 而不是 Python 来计算。
-
结果和中间值是整数吗?大概不是,但是您的输入(特别是
p)是,并且您将fabs应用于其中之一... -
预期的答案是什么?
-
NumPy 不会比普通 Python 更好地处理这个问题。事实上,由于 long->float 转换处理不同,它会更快崩溃。
-
如果它们是整数,python 确实 处理如此大的数字。任意大其实。如果你需要浮点数,你应该试试
Decimal模块,或者mpmath