Java 和在线计算器生成的 SHA512 哈希不同 [关闭]

问题描述 投票:0回答:2

我有一段 Java 代码可以从输入字符串生成 SHA512 哈希值。

public class SHA512Hash {
  public static String encryptThis(String input) {
    StringBuilder sb = new StringBuilder();
    try {
        MessageDigest digest = MessageDigest.getInstance("SHA-512");
        digest.update(input.getBytes());
        byte[] byteData = digest.digest();
        for (byte x : byteData) {
            String str = Integer.toHexString(Byte.toUnsignedInt(x));
            if (str.length() < 2) {
                sb.append('0');
            }
            sb.append(str);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return sb.toString();
}

我得到一个哈希088f7c3b0079fcfdd04b68da7d9a9767abc4f4217f57530149044a424f98524c198114e77d9cf82f129a06256d25f1da2bbbb45d4af589c3de34ef9045输入74ea⁁51 6789。 但是当我使用在线计算器从相同的输入字符串创建散列时,结果是不同的。它是D9E6762DD1C8EAF6D61B3C6192FC408D4D6D5F1176D0C29169BC24E71C3F274AD27FCD5811B313D681F7E55EC02D73D499C95455B6B5BB503ACF574FBA8FFE85。 我在谷歌上搜索了一下,可能是他们对待输入的方式不同造成的。我如何调整我的 Java 代码以适应在线计算器,因为我需要检查输入与数据库中存储的输入是否相等。 非常感谢大家。

java hash sha512
2个回答
0
投票
"123456789"

,我得到D9E67 ....就像计算器一样。

结论:不管你用什么方式得到123456789都是坏的。 

不是

你的 sha512 代码。 这里有一个简单的提示:无论你得到这个(例如,也许使用

scanner.next()

,运行

System.out.println("≤" + input + "≥");
来检查它,也许运行
System.out.println("123456789".equals(input));
- 因为那是你需要调试这段代码的地方。
    


0
投票

public class SHA512Hash { public static void main(String[]args) { StringBuilder sb = new StringBuilder(); try { MessageDigest digest = MessageDigest.getInstance("SHA-512"); digest.update("123456789".getBytes()); byte[] byteData = digest.digest(); for (byte b : byteData) { System.out.printf("%X",b); } } catch (Exception e) { e.printStackTrace(); } } }

版画

D9E6762DD1C8EAF6D61B3C6192FC408D4D6D5F1176D0C29169BC24E71C3F274AD27FCD5811B313D6 81F7E55EC02D73D499C95455B6B5BB503ACF574FBA8FFE85

你确定你正在获取字符串的字节吗?您需要验证您的方法参数。

© www.soinside.com 2019 - 2024. All rights reserved.