java-使用UUID为特定字符串生成唯一标识符是否安全(就唯一性而言)?

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);

您认为哪种方式更适合我的问题?

解决方法:

UUID.nameUUIDFromBytes看起来基本上只是MD5哈希,结果表示为UUID.

在我看来,显式地使用base64编码的哈希是比较清楚的,部分原因是您可以控制使用哪个哈希-如果冲突带来任何类型的安全风险,这可能是相关的. (正是出于这个原因,SHA-256比MD5可能是更好的选择.)当然,SHA-256中的字符串会更长,但是希望这不是问题.

请注意,无论哪种情况,我都将使用通过StandardCharsets的固定编码将字符串转换为文本.不要使用平台默认值(按照您的第一个代码片段),而应使用StandardCharsets而不是魔术字符串值(根据您的第二个代码片段).

上一篇:javascript-对表单中的数据进行代码哈希处理的功能-已经具有功能,但是不知道在哪里调用


下一篇:javascript-什么是JS正则表达式来匹配文本中的sha256单词哈希?