我有多个字符串,我想用它们来生成一个单一的、固定长度的、确定性的字符串。我试图确保数据库中的唯一性,并且还将使用字符串作为文件名;所以我需要尽可能避免冲突,并需要避免特殊字符。我还需要它是确定性的,以便相同顺序的相同三个字符串将产生相同的输出字符串。
我想在已知的分隔符和 base64 编码上连接字符串。然而,这不是固定长度。
我想连接字符串,从该字符串中获取哈希值,然后对它进行 base64 编码。然而,默认情况下 base64 有特殊字符,windoze 会抱怨,这似乎是不好的做法。
现在我正在这样做,这也感觉很丑陋:
protected UUID parseUUID() {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
List<String> strings = new ArrayList<>();
strings.add(stringOne);
strings.add(stringTwo);
strings.add(stringThree);
strings.removeIf(str -> str == null || str.isEmpty());
for(int i = 0; i < strings.size(); i++) {
String string = strings.get(i);
string = string.replace("|", "\\|");
strings.set(i, string);
}
String input = String.join("|", strings);
byte[] hash = digest.digest(input.getBytes());
return UUID.nameUUIDFromBytes(hash);
} catch(NoSuchAlgorithmException e) {
return null;
}
}
与此方法发生冲突的几率是多少?从多个输入字符串生成适合文件名的确定性固定长度字符串的最佳方法是什么?当然不是这样。
猛跑小猪
慕标琳琳
相关分类