是否可以将短子串与散列长串进行比较

时间:2017-05-22 20:49:57

标签: string algorithm hash

我只有长字符串的哈希值,但我无法访问它的内容。

现在我有一个新的短字符串,可以被长字符串包含。我需要确定长字符串是否包含短字符串。

Integer longStringHash = 352736;

String shortString = "hello world";

if (compare(hash(shortString), longStringHash) == 1) {
  ;// wow, they are very close!
}

有没有为此目的的算法?

PS。 shortString的长度小于longString的长度。

1 个答案:

答案 0 :(得分:0)

如果您只将哈希作为信息,则无法谈论"长字符串":

  • 有一个无限的字符串和给定的哈希值。
  • 有一个无限的字符串,给定的散列并以给定的子字符串开头。
  • 有20字节longString的bazillions包含给定的2字节shortString和给定的散列。
  • 如果您的哈希只是一个32位或64位整数(而不是512位SHA2),那么强行搜索是非常可行的。

这是一个小型Java代码,证明它是可能的:

public class CheckLongHash
{
    public static void main(String[] args) {
        String shortString = "hello world ";
        String longString = "hello world fqgr46bnnevab";
        Integer goal = 352736;
        System.out.println(longString.startsWith(shortString) &&
                longString.hashCode() == goal);
        // true
    }
}

"hello world fqgr46bnnevab" 长字符串?可能不是。它通过了规格吗?是。