0

有人可以请教,为什么在计算哈希后,将负值存储到 e ?

static byte[] bytes;
BigInteger[] numbers = {A, ANeg, Aseed, AseedNeg, C1, C2, C1Neg, C2Neg};
foreach (BigInteger number in numbers)
{
    bytes = number.ToByteArray();
}
SHA1 sha = new SHA1CryptoServiceProvider();
hash = sha.ComputeHash(bytes);
e = new BigInteger(hash);
4

2 回答 2

0

MSDN 上的BigInteger(byte[])构造函数文档提供以下内容:

如果设置了 value 中最高字节的最高位,则生成的 BigInteger 值为负

为防止正值被误解为负值,您可以在数组末尾添加一个零字节值。

应用文档:

  1. ehash如果(ie, )中的最后一个字节hash[hash.Length - 1]大于 0x7f (127),则为负数。

  2. 要将 的值解释hash为无符号数,请在 的末尾添加一个零字节值hash,例如,

    e = new BigInteger(hash.Concat(new byte[]{0}).ToArray());
    
于 2013-11-15T01:15:39.937 回答
0

出于同样的原因,“-3”是负数,“2”不是;用于指示数字低于零的符号在那里:如果有人写下“-3”,这是“-”。对于 BigInteger,这是最重要的位。

于 2013-11-15T00:57:31.797 回答