javascript - 大十六进制数的运算

标签 javascript hex

我正在尝试实现 Diffie-Hellman key 交换。由于内存限制,我正在处理 JavaScript 无法以十进制形式处理的大数字。

我想要执行运算g^a mod p = A,其中变量的长度在 512 到 1536 位之间。

由于内存限制,我不知道如何求解这样的方程。我无法将变量转换为小数然后求解。

我试图找到用于对十六进制数字执行数学运算的 JavaScript 库,但我没有找到任何

注意: 我将使用 SSL,所以不用担心 JavaScript 代码注入(inject)。

最佳答案

首先,在计算g^a mod p时,你不会先计算指数然后再计算mod,因为这样数字就会变得非常大。相反,您在每一步都取模,因此您永远不必处理大于 p^2 的数字。

要计算指数,您可能需要使用平方求幂算法,记住在每次平方和每次乘法后取模。

参见:http://en.wikipedia.org/wiki/Exponentiation_by_squaring (看看那里的基本方法)。

但实际上,任何优秀的 JavaScript bignum 库都应该为您做到这一点。

如果你非要问的话,那说明你没有能力自己实现加密功能。密码学很难。 (例如,我上面描述的方法具有定时旁路攻击,因此它不适合玩具以外的用途)。找到一个其他人已经完成了艰苦工作的库,并学习如何正确使用它。

关于javascript - 大十六进制数的运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19428050/

相关文章:

javascript - 不使用 ID 向下滑动 moreinfo div

javascript - 在javascript中循环函数随机次数

javascript - 如何使 node.js mysql 连接池在启动时可用

java - 如何使用 Java 从地址获取值?

html - 为什么是 HTML 十进制和 HTML 十六进制?

javascript - 导航栏 - 使用 JavaScript 切换事件链接

javascript - 未捕获的类型错误 : Cannot read property 'firstChild' of null (Google maps failing to load)

c - 十六进制数比较?

c - 如何使用位掩码将十六进制数转换为二进制数

r - 如何将r中的矩阵中的十六进制转换为二进制?