我应该如何解码由Hashing.murmur3_32()编码的长变量?

时间:2013-05-22 08:35:15

标签: java hash decode

我在Java程序中得到了一个String变量,我知道它是通过以下代码生成的:

public static String code(String text) {
    final byte[] bytes = text.getBytes();
    HashCode  hc = Hashing.murmur3_32().hashBytes(bytes, 0, bytes.length);
    long tmp = hc.asInt();

StringBuilder sb = new StringBuilder("");
    sb.append(Integer.toHexString((int) tmp));
    return sb.toString();
}

如何解码此变量以获取原始文本?

2 个答案:

答案 0 :(得分:1)

不幸的是,你做不到。散列函数意味着是单向的。此外,会有几个不同的字符串产生相同的散列,因此无法恢复明文。

答案 1 :(得分:0)

不,没有这样的方法。哈希函数是有损的。

当你考虑它时,所有可能字符串的集合远远大于所有可能的整数集合,这使得双向映射成为不可能。

如果可以从其哈希码中恢复字符串,那么就可以将任意数量的数据压缩为单个int,然后能够完美地重构它。