更改sha 256更新的顺序会更改值

时间:2017-09-27 21:16:14

标签: java hash sha message-digest

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

总体结果不一定相同吗? 或更改订单结果不同哈希

1 个答案:

答案 0 :(得分:1)

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