【发布时间】:2014-11-21 17:58:15
【问题描述】:
我使用以下代码生成一个 bigInteger 作为字符串的哈希值。
public static BigInteger hash(String str) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA1");
digest.reset();
byte[] input = digest.digest(str.getBytes());
return new BigInteger(1,input);
}
另一方面,我使用以下代码生成了许多 id(BigInteger 值):
int idLength = 160;
Random r = new java.util.Random();
BigInteger id = new BigInteger(idLength, r);
所以我有一个 id 最小值和一个 id 最大值,我希望第一个代码生成的所有哈希值都在最小值范围内,而最大值由第二个代码生成。 如何使用 $maxBitLength = idLength$ 获得哈希函数的结果(类似于 $new BigInteger (String str, int numBits)$)
【问题讨论】:
-
请记住,
str.getBytes()以 默认平台编码 形式返回字节,这可能会因系统而异,并且会以意想不到和不受欢迎的方式发生变化。通常最好使用str.getBytes(java.nio.charset.StandardCharsets.UTF_8)明确指定字符集,或者在旧版本的Java 上使用str.getBytes("UTF-8")(或您使用的任何字符集)。 -
感谢@DavidConrad
str.getBytes()。
标签: java hash sha1 biginteger