如果字符串中的大小小于11个字节的唯一ID,则生成

时间:2011-03-16 07:26:11

标签: java security

我正在开发一段代码以从输入字符串生成唯一的十六进制值。输出大小必须小于11个字节,这是要求。有人请给我一个洞察力。我已经完成了字符串到二进制的转换,然后是六边形映射,它产生了一个字母数字字符的组合,但是大小总是大于11个字节。我还需要从这个唯一的id重新生成输入......这是可能的......

谢谢你

2 个答案:

答案 0 :(得分:1)

如果您的结果必须绝对唯一,您的输入可以是任意长度,那么您的任务就无法完成。

可以这样想:11个字节有多少种不同的组合? 256 11 (或2 11 * 8 = 2 88 )。

这是一个很大的数字,对吗?是的,但它还不够大。

为了简单起见,我们只讨论ASCII字符串,因此我们有128个不同的值(实际上Java String中的字符有更多可能性,但原则保持不变。对于简单性我们也忽略了\0中的String字符不太可能。)

现在,有128个 13 不同的13个字符的ASCII字符串。这是2 7 * 13 或2 91 的不同组合。显然,对于2 91 不同的字符串,你不能拥有2个 88 可能的id中的唯一id。

答案 1 :(得分:0)

少于11个字节表示最多10个字节。

<击> 8 ^ 10是1073741824。 2 ^ 80是一个巨大的数字。

因此,如果您使用十六进制值并将其取模为该数字,则应该适合10个字节。将余数转换回十六进制。

无法重新生成输入。如果允许输入超过11个字节,则无法进行。那将是无休止的压缩。