java - 更改 sha 256 更新的顺序更改值

标签 java hash sha message-digest

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

示例

    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/

相关文章:

java - JSP 自定义标签捕获用户输入

java - Matcher java 不起作用,但正则表达式似乎不错

perl - Perl:将哈希键与正则表达式匹配

java - JDK 7 的支持终止对 Android 开发有何影响

java - 使用优先级堆/比较器时输出不规则

ruby - 如何在我的数据库中存储哈希值?

python - 代码迭代真的很慢,为什么?

git - 使用 Gitlab Ci Cd 将文件添加到存储库

java - 使用字符串生成公钥和私钥

security - 如何计算计算 SHA-256 哈希值所需的时间?