0

假设我的数据存储中有一个实体,我知道它可以具有key_name 从它的属性组合派生的唯一性:

例子:

class Render(db.Model):

    #Math props
    x_size = db.IntegerProperty()
    y_size = db.IntegerProperty()
    center_axis_x = db.FloatProperty()
    center_axis_y = db.FloatProperty()
    center_axis_z = db.FloatProperty()
    iterations = db.IntegerProperty()

我确信没有其他实体具有完全相同的属性,因此到目前为止,为了创建我用户的唯一密钥:

render_key=hashlib.md5(str(properties.x_size) +
                                str(properties.y_size) +
                                str(properties.iterations) +
                                str(properties.center_axis_x) +
                                str(properties.center_axis_y) +
                                str(properties.center_axis_z)
                                ).hexdigest()

hexdigest 让我让密钥 url 安全且用户友好,但我相信它也可能需要讨论。

那么问题来了。在上述情况或更改版本中,还有其他更好的方法可以达到相同的结果吗?它不需要向后兼容。因此,即使最终密钥与我的方法生成的密钥不同,这也不是问题。

谢谢

4

1 回答 1

1

总体而言,您的计划是好的,除了 md5 不能保证您不会发生碰撞(尽管可能性很小)。您可以通过使用 SHA-256 来使冲突更不可能发生,或者只是不对其进行哈希处理,您就可以开始了。

取决于您是否可以接受发生碰撞并且覆盖错误实体的非常罕见的情况。

于 2012-12-29T16:22:11.870 回答