生成依赖于字符串哈希

时间:2016-12-30 16:23:50

标签: java random hash

我正在尝试生成依赖于输入字符串的n个随机数。它将是一个函数generateNumbers(String input),它为相同的输入字符串生成相同的数字集,但对于略有不同的输入字符串生成完全不同的数字。

我的问题是:有一种简单的方法吗?

2 个答案:

答案 0 :(得分:0)

我同意nihlon,如果你想要的是一个函数f()返回一个int,f(string1) != f(string2)对于任何string1string2在一些字符串S中那么你正在寻找一个perfect hash。 显然,如果S是所有可能字符串的集合,则有超过2 ^ 32,甚至2 ^ 64的方式,因此不能存在返回f()甚至是int的{​​{1}} long。因此,问题是:S如何表征?

另外,您确定需要不同字符串的唯一数字吗?在大多数问题域中,常规散列是足够的......

答案 1 :(得分:0)

正如Roberto所说,散列是一种方法,只有两种不同字符串散列到相同值的可能性很小。该概率取决于您允许的字符串的最大大小以及生成的哈希值的位大小。

您也可以使用加密,但是您必须将字符串大小限制为块密码的一个或两个块。两个AES块是32个字符,将产生256位数字。

选择您可以使用的最小字符串大小,以及您可以使用的最大散列大小/块大小。像fnv hash这样的非加密哈希将比SHA-256之类的加密哈希更快,但显然不太安全。你没有说安全对你有多重要。