如果我创建一个消息摘要然后用字节值更新它,更改顺序更改哈希的输出
示例
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”是两个不同的输入,因此如果它们具有相同的哈希值,那就既令人惊讶又不幸。
关于java - 更改 sha 256 更新的顺序更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46457340/