0

如果我创建一个 messagedigist 然后用字节值更新它,更改顺序更改哈希的输出

例子

    BigInteger d_KGC = new BigInteger("773182302672421767750165305491852205951657281488");
    BigInteger r_KGC = new BigInteger("1354751385705862203270732046669540660812388894970");
    String C_ID = "id_c";

    hash_h_c.update(r_KGC.toByteArray());
    hash_h_c.update(d_KGC.toByteArray());
    hash_h_c.update(C_ID.getBytes());
    BigInteger h_c = new BigInteger(1, hash_h_c.digest());
    System.out.println(h_c);

输出

49379655005878985488511725474312101658690290667242109419474456484341588492679

但是,如果我更改更新顺序,例如:

    hash_h_c.update(d_KGC.toByteArray());
    hash_h_c.update(r_KGC.toByteArray());
    hash_h_c.update(C_ID.getBytes());
    BigInteger h_c = new BigInteger(1, hash_h_c.digest());
    System.out.println(h_c);

输出

74931638923759682675388497216517269416730536285702508607436092426996570518730

总的结果不应该是一样的吗?或更改顺序导致不同的哈希

4

1 回答 1

1

如果更改输入顺序会更改哈希值,这实际上是一件好事。否则,例如,您会遇到“bat”和“tab”都哈希到相同值的问题。对于像 SHA-256 这样的加密哈希,目标是使(具有非常大但不是无限量的资源)无法找到任何其他产生相同哈希值的输入,并且“bat”和“tab”是两个不同的输入,因此如果它们具有相同的哈希值,那将是令人惊讶和不幸的。

于 2017-09-28T03:39:38.833 回答