我正在尝试使用
SHA384
在Java中生成一个48个字符的哈希字符串,输出应该类似于以下内容:
我的当前实现如下:PÊ&¿ a»@óæS0iÛ6në0Ê`o€X·„\KÃò¢ï¼fÖ…)nE@ó^s
public static String getHash(byte[] inputBytes, String algorithm) throws Exception{
String hashValue = "";
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
messageDigest.update(inputBytes);
byte[] digestedBytes = messageDigest.digest();
hashValue =
DatatypeConverter.printHexBinary(digestedBytes).toLowerCase();
} catch(Exception e) {
e.printStackTrace();
}
return hashValue;
}
public static void main(String[] args) throws Exception {
System.out.println(getHash("The quick brown fox Jumps over the lazy dog".getBytes(), "SHA-384"));
}
输出:
b94a2179d90daf662f2ae8e41f92c2831eb0eea5a352f81ac7b0a80a07b2c357d88d0e3fc12bf4f0d888335508b09c41
从观察来看,输出的字符串长度为96个字符而不是48个字符,我做错了什么?
digestedBytes
转换为十六进制。请注意,digestedBytes.length
等于 48(我已测试)。但是您的“final”字符串有 64 个字节(但在 UTF-8 中只有 42 个字符)... 因此存在一些不匹配,要么您的最终字符串是错误的,要么您实际上想要 64 字节的哈希值。 - k_ssb