计算 Diffie Hellman 挑战 - Python vs NodeJS

Calculating Diffie Hellman Challenge - Python vs NodeJS

我正在尝试根据来自 NodeJS 客户端应用程序的算法计算 Python 中的 Diffie-Hellman 挑战赛。 NodeJS客户端应用代码如下:

var a = crypto.randomBytes(25).toString('hex');
var p = 'ffffffffffff55555555555555555aaaaaaaaaaaaaddddddddddddd888888888888999999999999ccccccccccc3333333333999999999900000002222222222222bbbbbbbbbbbbbbbb00000000000000ddddddddddddddddd12467382467321846732814672381647382647893216478326478912364897264781269afdcafdcafdcafdcafdcafdcafdacfdcafdcafdcafdcafdca4731829473847321890748392147328190478932748390274893012ffffffff55555555aaaaaaadddddddd8888888899999999cccccccc57856432785643756423786543786789fffff67867896789678967896786fffffccccaaaaa678678967fca67ee6789679cccc2222'
var g = 2
const A = bigInteger(g).modPow(bigInteger(a, 16), bigInteger(p, 16));

NodeJS 应用程序成功计算 A 并在浏览器控制台中将值作为字符串打印出来。

另一方面,当我在本地 Python 服务器上使用该算法时, A 的计算没有及时完成(事实上,浏览器一直在旋转在写这个问题的整个过程中)。这是 Python 代码:

 a = secrets.token_hex(25)
 A = (g**int(a, 16)) % int(p, 16)

谁能告诉我为什么NodeJS可以完成计算而Python不能?我应该使用一些加密库来处理 Diffie-Hellman 验证吗?我怎样才能解决这个问题?

built-in 函数 pow 可以传递第三个 mod 参数来获得数的模数的另一个次方,就像 modPow 函数你正在打电话

A = pow(g, int(a, 16), int(p, 16))