在 Java 中将字符串转换为可逆的东西

convert a string into something reversible, in Java

我有很多 url 作为 HBase table 中的键。由于它们 "all" 从 http:// 开始,Hbase 将它们放在同一个节点中。因此,我以 +100% 的节点和另一个空闲节点结束。

所以,我需要将 url 映射到类似于哈希但可逆的东西。在 JAVA8.

中是否有任何简单、标准和快速的方法来做到这一点

我寻找前缀的随机(线性)分布。

注:

谢谢, 科斯汀

没有单一的标准方法。

您可以做的一件事是在密钥前加上它的散列值。类似于:

a01cc0fe http://...

这很容易逆转(只需剪掉散列字符,您可以将其设为固定长度)并且可以很好地分发。

字符串的哈希码在 JVM 之间是稳定和一致的。计算它的算法在 String.hashCode's documentation 中指定,因此您可以将其视为字符串工作原理的一部分。

添加36位十进制数[0-9a-z]编码的哈希码前缀。

public static String encode(String s) {
    return Integer.toString(s.hashCode() & 0xffffff, 36) + "#" + s;
}

public static String decode(String s) {
    return s.replaceFirst("^[^#]*#", "");
}

示例:

http://google.com/  <-> 5o07l#http://google.com/