背景:
我想在数据库中生成代理键/备用键,以便可以公开公开它们作为API端点中的资源标识符,如下所示:GET /resources/{id}
有问题的数据是真实来源数据库的副本,并且我副本中的唯一标识符是敏感的,无法在URL中公开。
因此,我想从现有数据中生成一个新的但可复制的标识符,我正在考虑使用UUID v3。 (或v5,但我没有看到任何Java官方实现)如果必须重新创建副本,则可以复制,那么可以确定我复制了相同的标识符。
如果很重要,数据将存储在SQL Server数据库中。
问题:由于UUID v3 / 5基于MD5 / SHA-1,因此可以安全使用吗?
答案 0 :(得分:1)
不建议使用版本3。没有任何已知的方法(除了蛮力之外)可以从UUID取回名称,但是MD5确实存在问题,并且随着时间的推移攻击只会变得更好。如果您使用的库尚不支持版本5,请获取支持的版本。
对于它们两个而言,如果进入哈希的数据量很小,那么对于这两个版本,蛮力可能是一个真正的问题。答案是使用更多的输入数据,即不再使用蛮力。确切的选项将取决于您所提供的内容以及它的可猜测性