我希望每个唯一字符串获得一个唯一的十六进制。截至目前我正在使用Message Digest类,但有可能(非常少但仍然)对于两个唯一字符串,计算的十六进制可以是相同的。那么有没有其他方法可以做这样的事情,以便我有唯一的十六进制用于独特的字符串。
提前致谢。
答案 0 :(得分:1)
(假设您的意思是 $('.nav li a').on("click",function (e) {
window.location.href = $(this).attr("data-href");
});
,而不是hash
,因为您提到了MessageDigest)。
您不能为每个唯一字符串使用唯一的哈希码。可以这样想:A hash function将字符串(或任何其他对象)映射到整数。由于每个整数都可以表示为一个字符串,例如hex
,至少与不同的整数一样多的字符串 - 然后还有更多,例如,不是数字的所有内容,例如"123"
。因此,由于字符串多于整数,因此无法在所有情况下为唯一字符串生成唯一的哈希码。
话虽如此,对于"每天哈希" (对于散列表等),String.hashCode
提供的散列函数大致与它一样好。对于cryptographic hashing,"Hello"
似乎是要走的路。根据您当前使用的内容,您可能可以升级到更强大的算法,例如, MessageDigest
代替sha-512
。
答案 1 :(得分:0)
将每个字符转换为十六进制值:
String hex = Arrays.stream(str.split(""))
.map(s -> s.charAt(0) + 0)
.map(c -> String.format("%4x", c))
.collect(Collectors.joining(""));