有人可以建议,为什么在计算哈希之后,将负值存储到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);
答案 0 :(得分:0)
出于同样的原因,“ - 3”是否定的,“2”不是;用于表示数字低于零的符号是:在有人写下“-3”的情况下,这是“ - ”。对于BigInteger,这是最重要的一点。
答案 1 :(得分:0)
MSDN上的BigInteger(byte[])
constructor documentation提供以下内容:
如果设置了最高位字节的最高位,则生成的BigInteger值为负
和
为防止将正值误解为负值,可以在数组末尾添加零字节值。
应用文档:
e
中的最后一个字节(即hash
)大于0x7f(127),则 hash[hash.Length - 1]
将为负数。
要将hash
的值解释为无符号数,请在hash
的末尾添加零字节值,例如
e = new BigInteger(hash.Concat(new byte[]{0}).ToArray());