背景:
我想在数据库中生成代理/备用键,以便可以将它们作为 API 端点中的资源标识符公开公开,如下所示:GET/resources/{id}
相关数据是真实来源数据库的副本,我的副本中唯一的标识符是敏感的,不能在 URL 中公开。
所以我想从现有数据生成一个新的但可重复的标识符,并且我正在考虑使用 UUID v3。 (或 v5,但我没有看到任何 Java 官方实现)在必须重新创建我的副本的情况下可重现,那么我可以确定我重现了相同的标识符。
如果重要的话,数据存储在 SQL Server 数据库中。
问题:由于 UUID v3/5 基于 MD5/SHA-1,因此以这种方式使用它们是否安全?
最佳答案
出于某种原因,版本 3 已被弃用。没有已知的方法(除了暴力破解之外)可以从 UUID 恢复到名称,但 MD5 确实存在问题,并且随着时间的推移,攻击只会变得更好。如果您使用的库尚不支持版本 5,请获取一个支持版本 5 的库。
对于这两个版本,如果进入哈希的数据量很小,那么暴力破解可能是两个版本真正需要考虑的问题。答案是使用更多的输入数据,即足够多的输入数据,以至于不再可能使用暴力破解。确切的选项将取决于您可用的内容以及它的可猜测性
关于java - 由于 UUID v3 基于 MD5,因此它在为 API 生成代理 key 时是否不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53474420/