更改 sha 256 更新顺序更改值

Changing order of sha 256 update change the value

如果我创建一个 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

总的结果不就一定是一样的吗? 或改变顺序导致不同的散列

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