我正试图根据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验证吗?我怎样才能克服这个问题?
可以向内置函数pow
传递第三个mod
参数,以获得另一个幂的数模,就像您正在调用的modPow
函数一样
A = pow(g, int(a, 16), int(p, 16))