两个字符串:相同的哈希码

时间:2014-05-10 17:36:39

标签: java string collision hashcode

我必须使用相同的哈希码生成两个字符串。我研究过它,我达到的最大值是只更改字符串的前两个字符。

   public static String same(String s) {
            String re = "";
            char c = 0;
            char ch = 0;
            for (int i = 0; i < s.length(); i++) {
                c = (char) (s.charAt(0) + 2);
                ch = (char) (s.charAt(1) - 31 * 2);
            }
            String S = new String(new char[] { c, ch });
            re = S+ s.substring(2);


    return re;
    }

如何使其适用于所有string.length()??

2 个答案:

答案 0 :(得分:1)

来自String的hashCode在JavaDocs中描述 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#hashCode()

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

因此,对于每个char,您可以将其替换为任何char,其中s [i] * 31 ^(n-i-1)给出相同的值。

答案 1 :(得分:0)

我想知道为什么你必须使用相同的哈希码生成2个字符串?您无法生成散列到特定哈希代码的对象。散列函数是单向函数。散列码加速对象比较并将对象映射到特定散列空间。除非您知道用于计算代码的方法的内部工作方式,否则您无法对其进行反向工程以计算将生成该哈希代码的对象状态。