如何将哈希 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
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