在 Java 中将字符串转换为可逆的东西
convert a string into something reversible, in Java
我有很多 url 作为 HBase table 中的键。由于它们 "all" 从 http://
开始,Hbase 将它们放在同一个节点中。因此,我以 +100% 的节点和另一个空闲节点结束。
所以,我需要将 url 映射到类似于哈希但可逆的东西。在 JAVA8.
中是否有任何简单、标准和快速的方法来做到这一点
我寻找前缀的随机(线性)分布。
注:
反转 url 并不有趣,因为很多 url 以 / ? =
结尾,并且存在分布不平衡的风险。
我不需要加密,但我可以接受
我不求压缩,但如果可以的话欢迎:)
谢谢,
科斯汀
没有单一的标准方法。
您可以做的一件事是在密钥前加上它的散列值。类似于:
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/
我有很多 url 作为 HBase table 中的键。由于它们 "all" 从 http://
开始,Hbase 将它们放在同一个节点中。因此,我以 +100% 的节点和另一个空闲节点结束。
所以,我需要将 url 映射到类似于哈希但可逆的东西。在 JAVA8.
中是否有任何简单、标准和快速的方法来做到这一点我寻找前缀的随机(线性)分布。
注:
反转 url 并不有趣,因为很多 url 以
/ ? =
结尾,并且存在分布不平衡的风险。我不需要加密,但我可以接受
我不求压缩,但如果可以的话欢迎:)
谢谢, 科斯汀
没有单一的标准方法。
您可以做的一件事是在密钥前加上它的散列值。类似于:
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/