查找与给定字符串具有相同 hashcode() 值的字符串
Finding a String with the same hashcode() value as given String
我正在尝试查找与给定字符串具有相同散列结果的字符串。
例如:
如果我有 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) 并找到与 [=15 长度相同的字符串 () =] 具有等效的哈希值?
你需要解这个方程:
(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
使用问题中的函数。
我正在尝试查找与给定字符串具有相同散列结果的字符串。
例如:
如果我有 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) 并找到与 [=15 长度相同的字符串 () =] 具有等效的哈希值?
你需要解这个方程:
(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
使用问题中的函数。