Java 生成依赖于字符串哈希的随机数

Java 生成依赖于字符串哈希的随机数,java,random,hash,Java,Random,Hash,我试图生成依赖于输入字符串的n随机数。这将是一个函数generateNumbers(字符串输入),它为相同的输入字符串生成相同的数字集,但为稍有不同的输入字符串生成完全不同的数字 我的问题是:有没有一种简单的方法可以做到这一点?我同意nihlon的观点,如果你想要的是一个函数f()返回一个int,使得f(string1)!=f(string2)对于任何string1,string2在某些字符串集S,那么您正在寻找一个。 显然,如果S是所有可能的字符串的集合,则有2^32甚至2^64个以上的字符串

我试图生成依赖于输入字符串的
n
随机数。这将是一个函数
generateNumbers(字符串输入)
,它为相同的输入字符串生成相同的数字集,但为稍有不同的输入字符串生成完全不同的数字


我的问题是:有没有一种简单的方法可以做到这一点?

我同意nihlon的观点,如果你想要的是一个函数f()返回一个int,使得
f(string1)!=f(string2)
对于任何
string1
string2
在某些字符串集
S
,那么您正在寻找一个。 显然,如果
S
是所有可能的字符串的集合,则有2^32甚至2^64个以上的字符串,因此不存在返回
int
甚至
long
f()。因此,问题是:
S
是如何描述的


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

正如Roberto所说,散列是实现这一点的一种方法,两个不同字符串散列到相同值的可能性很小。这种可能性取决于您允许的字符串的最大大小和结果哈希数的位大小

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


选择可以使用的最小字符串大小,以及可以使用的最大哈希大小/块大小。非加密散列(如)将比加密散列(如)快,但显然不太安全。您没有说安全性对您有多重要。

听起来您并不想实际生成随机数,而是基于给定的输入字符串生成一组唯一的数字。或者,换句话说,一个完全数字的散列。