2 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
我真的不明白,是什么阻礙了你像你已經(jīng)做的那樣只使用哈希函數(shù)?它們旨在完成您想要實(shí)現(xiàn)的目標(biāo)(前提是我說(shuō)對(duì)了)。您可以簡(jiǎn)單地連接字符串,應(yīng)用散列函數(shù)并存儲(chǔ)散列。
碰撞當(dāng)然是可能的,但是當(dāng)試圖將無(wú)限空間映射到有限空間時(shí),情況總是如此。

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
我現(xiàn)在想出的解決方案是:
protected String parseHash() {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-512");
List<String> strings = new ArrayList<>();
strings.add("one");
strings.add("two");
strings.add("three");
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 DatatypeConverter.printHexBinary(hash);
} catch(NoSuchAlgorithmException e) {
return null;
}
}
正如我讀過(guò)的那樣,UUID.nameUUIDFromBytes(hash);將計(jì)算給定散列的 md5,這會(huì)降低散列的分辨率。使用散列的原始十六進(jìn)制似乎是我能想到的最優(yōu)雅的方式,但我當(dāng)然愿意接受其他答案。
添加回答
舉報(bào)