Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果字符串中的唯一id小于11字节,则生成_Java_Security - Fatal编程技术网

Java 如果字符串中的唯一id小于11字节,则生成

Java 如果字符串中的唯一id小于11字节,则生成,java,security,Java,Security,我正在开发一段代码,从输入字符串生成唯一的十六进制值。输出大小必须小于11字节,这是需要的。有人能告诉我这方面的细节吗。我已经完成了字符串到二进制的转换,然后是六边形映射,它生成了字母数字字符的组合,但是大小总是大于11字节。我还需要从这个唯一id重新生成输入。这可能吗 感谢您的支持如果您的结果必须是绝对唯一的并且您的输入可以是任意长度,那么您的任务是不可能完成的 这样想:11个字节有多少种不同的组合?25611(或211*8=288) 这是一个很大的数字,对吗?是的,但是不够大 为了简单起见,

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


感谢您的支持

如果您的结果必须是绝对唯一的并且您的输入可以是任意长度,那么您的任务是不可能完成的

这样想:11个字节有多少种不同的组合?25611(或211*8=288)

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

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


现在,有12813个不同的13个字符的ASCII字符串。这是27*13或291个不同的组合。显然,291个不同字符串的288个可能id中不能有唯一id。

如果您的结果必须是绝对唯一的,并且您的输入可以是任意长度,那么您的任务就不可能完成

这样想:11个字节有多少种不同的组合?25611(或211*8=288)

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

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


现在,有12813个不同的13个字符的ASCII字符串。这是27*13或291个不同的组合。显然,291个不同字符串的288个可能id中不能有唯一的id。

小于11个字节意味着最多10个字节

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

所以,如果你取你的hexvalue,并取它与这个数的模,你应该把它放入10个字节中。将余数转换回十六进制


无法重新生成输入。如果允许您的输入长度超过11字节,则不可能。这将是一个无休止的压缩

小于11个字节意味着最多10个字节

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

所以,如果你取你的hexvalue,并取它与这个数的模,你应该把它放入10个字节中。将余数转换回十六进制



无法重新生成输入。如果允许您的输入长度超过11字节,则不可能。这将是一个无休止的压缩

如果未指定输入字符串的长度/内容,则很明显不存在到十六进制(<11字节)的1对1映射,因为字符串的域可能要大得多。@Winfred:这就是我下面要说的。不过我还用了几个词;-)@Joachim Sauer:我只是添加了它作为注释:P。很高兴你能正确地布置它。如果没有指定输入字符串的长度/内容,很明显,不可能存在到十六进制(<11字节)的1对1映射,因为字符串的域可能要大得多。@Winfred:这就是我下面要说的。不过我还用了几个词;-)@约阿希姆·绍尔:我只是把它添加为注释:P。很高兴你把它布置得很好。我忘了提到输入大小。它小于100字节。这有帮助吗?法尔:没有。除非有额外的限制(或者你可以取消唯一ID的要求),否则仍然不可能将每个可能的输入匹配到11个字节。好吧……如果我取消重新生成输入的要求,并使用一些哈希算法从输入生成标识符,输出大小仍然相同,即11字节;它有用吗??我想MD5可以在这里提供一些帮助。我遇到了一些关于这方面的线程…哦…我想冲突率可能会更高,对吧???:(@nowfal:当然,你可以使用MD5或任何其他哈希算法,并获得一个可能没有太多(或任何)的合理唯一标识符冲突,但没有保证。我忘了提到输入大小。它小于100字节。这有帮助吗?Fal:没有。除非有其他限制(或者你可以取消唯一ID的要求)仍然不可能将每个可能的输入匹配到11个字节。好吧…如果我不再需要重新生成输入,而是使用一些哈希算法从输入生成标识符,输出大小仍然相同,即11个字节;它能工作吗?我想MD5可以在这里提供一些帮助。我遇到了一些问题ds关于这个…哦…我猜冲突率可能会更高,对吧???:(@nowfal:当然你可以使用MD5或任何其他哈希算法,得到一个合理唯一的标识符,可能不会有很多(或任何)碰撞,但不能保证。很抱歉数学是错的。但是,我想2^80,而不是2^88是正确的答案。(对于这个数学问题,不是你的问题)。如果您可以为输入排除20%的字节,那么如果您尝试用80个字节表示字节子集的100个元素,这可能会很有趣。如果我们在取消输出大小要求(11个字节)后能够生成唯一的十六进制值,请您解释为什么无法进行重新生成对不起,我不确定你说的对。现在输入小于100字节,输出也可能是100字节,也就是50十六进制