产生固定长度的哈希字符串

时间:2018-11-09 11:48:47

标签: java

我想产生一个固定长度的哈希字符串。我为此使用MessageDigest API。我注意到API中的this函数,但它返回的是整数而不是字节数组。

当我尝试使用此重载的摘要方法时,我得到了java.security.DigestException:SHA-256摘要的长度必须至少为32,或者对于指定的偏移量和长度,输出缓冲区太小。

有人可以举一个如何产生固定长度的哈希值的例子吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Commons Codec DigestUtils生成哈希的十六进制表示。有几种可用的算法:

例如

String input = "Hello World";
String sha1 = DigestUtils.sha1Hex(input);
System.out.println(sha1); // 0a4d55a8d778e5022fab701977c5d840bbc486d0

答案 1 :(得分:0)

可以这样实现:

0 0 1 0 0
0 0 0 2 0
0 0 1 0 0
0 0 0 0 3

import javax.xml.bind.DatatypeConverter; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class TestA { public static void main(String [] args) throws Exception { String input = "Hello World"; System.out.println(DatatypeConverter.printHexBinary(hashBytes(input.getBytes(StandardCharsets.UTF_8)))); } public static byte[] hashBytes(byte [] bytes) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(bytes); return md.digest(); } } 当然可以代替SHA-256