我正在创建一个方法,它将UUID(作为String)作为输入并生成40字节(固定)输出(通过向其中添加更多信息)。 UUID字符串的长度本身为36个字符长(32个字符+4个连字符)。
我需要让它适合大约16个字符的东西。由于我们将这个uuid作为输入,这是我们的标识符,我们不想丢失它(我们可能需要用这个16个字符长的表示重新生成uuid)。
第二件事是,我们不确定我们总是会收到UUID作为输入,将来这可能是50个字符长的随机序列,所以需要为此生成固定的16个字符长的随机序列(也是可逆的)。
有可能为可变长度随机输入生成固定长度字节吗?需要确定唯一性,并且我们希望可变长度随机输入返回固定长度字节。
谢谢你的帮助。
答案 0 :(得分:0)
您必须保留数据库表以将小键映射到大键。这样你以后可以查找。这是对您的要求的100%支持
另一种方式是,
假设36个字符的UUID仅包含0123456789ABCDEF字符+ 4个非随机位置的
即。 abcdef14-15293abd-92835a5e-2524fa32
我们可以使用4bits简单地表示每个字符。 0 - > 0000,1 - > 0001,A - > 1010,B - > 1011等...
如果我们将两个4位数字合在一起作为一个8位字符,我们将得到16个字符。
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
public class Buffer{
public static void main(String args[]) throws Exception{
String input = "abcdef14-15293abd-92835a5e-2524fa32";
String[] hexNums = input.split("-");
ByteBuffer buffer = ByteBuffer.allocate(16);
for(int i =0 ; i < 4; i++){
long num = Long.parseLong(hexNums[i], 16);
buffer.putInt((int)(num + Integer.MIN_VALUE));
}
byte[] bytes = buffer.array();
String v = new String(bytes,"UTF-8");
System.out.println(v);
}
}