如何将哈希 MD5 值显示为 H2 中显示的文本?

How to display hashed MD5 value as text displayed in H2?

H2HASH函数returns字节,SELECT HASH('MD5', 'test') AS new_id FROM my_table;显示一个文本值: 098f6bcd4621d373cade4e832627b4f6

如何在 Java 中检索相同的文本值?使用 ResultSet.getBytes("new_id") 给出对象的地址,类似于 [B@48f278eb。通过 new String(ResultSet.getBytes("new_id"), StandardCharsets.UTF_8) 提供 gobbledygook:�Oh�؆nr�Mz��.

您看到 [B@48f278eb 的原因是因为生成的 MD5 散列以 non-string 格式的字节为单位。

这里是生成 MD5 散列并使用 StringBuilder 将生成的字节转换为字符串并对其进行格式化的完整示例String.format("%02x", b):

String text = "test";   
//Generate MD5 hash
byte[] bytesOfMessage = text.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] arr = md.digest(bytesOfMessage);

//Convert the bytes to a string
StringBuilder strBuilder = new StringBuilder();
    for(byte b:arr){
        strBuilder.append(String.format("%02x", b));
    }

//The complete string
String strHash = strBuilder.toString();

//Print or use the string
System.out.println("The MD of " + text + " is " + strHash);

并且输出符合预期:

The MD of test is 098f6bcd4621d373cade4e832627b4f6