C#BigIntegers得到正面的modPow

时间:2013-07-07 01:11:40

标签: c# .net math srp-protocol

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

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

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

我假设结果位于:-m < r < 0,因此您只需使用r + m


正确的做法是找到基数的最小非负残差,模m,先前取幂 - 即r <- r + m然后< / em> exponentiate。

答案 1 :(得分:0)

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

如果你最后得到一个负数,也许在做一个减法之后,你基本上应该在结果中添加N,直到它为非负数。对于巨大的负值,计算x%N相当于添加N,直到它只需要再添加一个N为正。