Hash碰撞 & 拒绝服务漏洞
前段时间在网上看到的:
这样的函数有个特点,即如果字符串X, Y的hash值相同,那么X,Y都添加任意相同的前缀或后缀的以后的hash值也都相同.比如: "rQ"与 "qp"的hash值相同, 则"rQrQ", "rQqp", "qprQ", "qpqp" 这四个也相同,继续这个模式就可以很容易构造出 2^n 个 2*n长度的不同字。
package test;
import java.util.HashMap;
public class Test
{
public static void main(String[] args)
{
String a = "rQ";
String b = "qp";
HashMap<String,String> map = new HashMap<String,String>();
map.put(a, "1");
map.put(b, "2");
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(map.get(a));
System.out.println(map.get(b));
}
}
输出结果:
3615
3615
1
2
2012-02-03