Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#大整数得到正的modPow_C#_.net_Math_Srp Protocol - Fatal编程技术网

C#大整数得到正的modPow

C#大整数得到正的modPow,c#,.net,math,srp-protocol,C#,.net,Math,Srp Protocol,我正在尝试实现安全身份验证的SRP协议。我的问题是,当我必须计算一个负数的ModPow时,它也会返回一个负数。我知道它可能被称为余数而不是模,但我必须得到正模才能生成正确的散列 我该怎么做呢?你可以从结果中加(或减)任意倍数的模,因为:r+km=r(mod m) 我假设结果是:-m

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

我该怎么做呢?

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

我假设结果是:
-m
,因此您只需使用
r+m



正确的做法是,在求幂之前,找到基的最小非负剩余,模m,也就是说,
rSRP没有任何需要取负数ModPow的运算。所有与ModPow相关的运算都应该在模运算中完成,这实际上意味着所有输入和输出都应该是非负的,并且小于某个模N


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

为什么要计算负数的ModPow?我不认为SRP做过那个操作,因为我在子结构后得到了一个负数。B-k*pow(g,x,N)。这对我来说是负值,你应该加N,直到它不再是负值。2点到3点是11点,而不是1点。您可以执行结果mod N,以确保它在N的0的一个加法范围内。我如何才能做到这一点?因为在它变为正数之前,我不能给它加m,因为它是一个非常大的负数,和它相比,m是非常小的。