java中唯一字符串的唯一十六进制

时间:2015-06-10 11:38:14

标签: java hex

我希望每个唯一字符串获得一个唯一的十六进制。截至目前我正在使用Message Digest类,但有可能(非常少但仍然)对于两个唯一字符串,计算的十六进制可以是相同的。那么有没有其他方法可以做这样的事情,以便我有唯一的十六进制用于独特的字符串。

提前致谢。

2 个答案:

答案 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(""));