String myText;
UUID.nameUUIDFromBytes((myText).getBytes()).toString();
我使用上面的代码生成特定文本的代表。 例如,Moien' 始终应该用" e9cad067-56f3-3ea9-98d2-26e25778c48f"来表示,项目重建之类的任何更改都不应该能够更改该UUID。
我之所以这样做,是因为我不希望这些特定文本对人类具有可读性(可理解性)。
注意:我不需要能够在散列后重新生成正文(例如" Moien")。
我也有另一种方式:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest((matcher.group(1)).getBytes("UTF-8"));
String a = Base64.encode(hash);
你觉得哪个更适合我的问题?
答案 0 :(得分:4)
UUID.nameUUIDFromBytes
似乎基本上只是MD5哈希,结果表示为UUID。
我明确地使用base64编码的哈希感觉更清楚,部分原因是你可以控制使用哪个哈希 - 如果冲突造成任何安全风险,这可能是相关的。 (出于这个原因,SHA-256可能是比MD5更好的选择。)当然,字符串将比SHA-256更长,但希望这不是问题。
请注意,在 的情况下,我会通过StandardCharsets
使用固定编码将字符串转换为文本。不要使用平台默认设置(根据您的第一个代码段),而不是StandardCharsets
优于魔术字符串值(根据您的第二个代码段)。