如果我创建了一个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
总体结果不一定相同吗? 或更改订单结果不同哈希
答案 0 :(得分:1)
如果改变输入顺序改变哈希值,那实际上是件好事。否则你会遇到“蝙蝠”和“#34;和" tab"例如,两者都散列到相同的值。对于像SHA-256这样的加密哈希,目标是使其不可能(具有非常大但不是无限量的资源)来找到产生相同哈希值的任何其他输入,并且" bat"和" tab"是两个不同的输入,所以如果它们具有相同的哈希值,那将是令人惊讶和不幸的。