我试图找到一个字符串,共享相同的哈希结果作为一个给定的字符串。
例如:
如果我有String 'den'
并使用Java的hashcode()
方法哈希结果=99,341
String s = "den";
System.out.println(s.hashCode());
Result = 99,341
知道hashcode()
方法计算
s[0]*31^(n-1) + s[1]*31^(n-2) +…+ 2 (n - 1)
我该如何处理这个结果(99,341))并查找相同长度的字符串())作为'den'
与相同的哈希值?
你需要解这个方程:
(x * 31^(3-1)) + (y * 31^(3-2)) + (z * 31^(3-3)) = 99341
它是一个平面,只要x,y,z是0到255之间的整数,平面上的每个点都是对你有好处的(如果你只谈论ASCII)
一个可能的解决方案是x=100, y=101, z=110
。仅仅到找到另一个,你可以改变其中两个的顺序,看看第三个是什么,例如:
x=101
y=???
z=110
(101 * 31^(3-1)) + (y * 31^(3-2)) + (110 * 31^(3-3)) = 99341
其中y=70
(F
)因此eFn
应该使用您问题中的函数具有与den
相同的hashCode
。