0

我正在尝试实施 SRP 协议以进行安全身份验证。我的问题是,当我必须计算一个负数的 ModPow 时,它也会返回一个负数。我知道它可能被称为余数而不是模数,但我真的必须得到正模数才能生成正确的散列。

我怎么能那样做?

4

2 回答 2

1

您可以从结果中添加(或减去)任意倍数的模数,因为:r + km = r (mod m)

我假设结果在: 中-m < r < 0,所以你只需使用r + m.


正确的做法是在取幂之前找到基数的最小非负余数,模 m - 即 ,r <- r + m然后幂。

于 2013-07-07T01:15:22.193 回答
0

SRP 没有任何需要取负数的 ModPow 的操作。所有与 ModPow 相关的算术都应该在模算术中完成,这实际上意味着所有输入和输出都应该是非负的并且小于某个模数 N。

如果你最终得到一个负数,也许在做减法之后,你基本上应该将 N 添加到结果中,直到它是非负数。对于巨大的负值,计算 x % N 等价于添加 N,直到它只需要再添加一次 N 即可。

于 2013-07-07T01:31:35.700 回答