目前我正在实施RSA算法。以下功能用于RSA中我们需要的功率。
private long power2(long x, long y, long n)
{
long temp = 1;
while (y > 0)
{
var z = y & 1;
if (z == 1)
{
temp = ((temp % n) * (x % n)) % n;
}
x = ((x % n) * (x % n)) % n;
y = y >> 1;
}
return temp;
}
这里n是9个字符长(从6开始)。 如果我增加n的值(从9开始),则此函数为某些x和y值给出负值。我不知道为什么会这样。长期可以包含值高达9223372036854775807并且在我的幂函数中,乘法无法超出此值。
如果我想花费更长时间(10-15个字符)然后我正在使用,我必须使用哪种数据类型。我尝试过Decimal和double,但它有与上面相同的问题(给出负值)。
答案 0 :(得分:3)
答案 1 :(得分:3)
您的解决方案仍然可以超越长值
你将x%n的结果(可以是10个字符长)与相同的值相乘,这得到的结果很可能超过2 ^ 64(在应用最后一个模数之前,模数之前的结果应该是适合长变量)
考虑使用BigInteger