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

  • 本文关键字:哈希 字符串 java
  • 更新时间 :
  • 英文 :


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

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

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

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

  • DigestUtils.sha1Hex()
  • DigestUtils.md5Hex()

例如

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

可以这样实现:

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当然可以代替SHA-1

最新更新