如何用java中的散列代码生成字符串



我知道java中的string.hashCode((是如何工作的:

public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}

假设我们有一个散列码;119193";对应于";xyz">
是否有任何方法可以解开它并找到真正的字符串

哈希函数只设计为单向函数。

当您将一个理论上无限大的输入组(所有可能的字符串(转换为有限数量的整数时,不可避免地会有多个不同的字符串产生相同的哈希。

也就是说,理论上可以测试大量的字符串,并检查新的哈希是否与存储的哈希匹配。尽管如此,您永远无法确定这个字符串是否与原始输入相同,因为多个字符串可能会产生相同的散列。

如果你有有限数量的输入字符串(即来自预定义的池(,或者你可以将测试搜索范围缩小到字典中的单词组合,你可以减少测试哈希所需的时间。

最新更新