我可以为文件名使用MD5或SHA1哈希吗?

时间:2017-08-18 17:25:50

标签: python django md5 filenames sha1

让我们考虑用户可以上传文件的网站。我可以将其内容的MD5或SHA1哈希用作文件名吗?如果没有,我应该使用什么?为了避免碰撞。

2 个答案:

答案 0 :(得分:3)

您几乎可以使用任何文件名,减去保留字符。除了哈希值之外,这些特殊选择不会告诉您文件本身。如果他们没有上传相同的文件,那么应该防止文件命名冲突。如果你不关心这一点,那就去吧。

通常人们上传文件以便有人将其拉回 down 。所以你需要有某种描述符;否则用户需要打开大量文件才能获得他们想要的文件。也许更好的选择是让用户选择一个名称(最多为字符限制),然后附加日期时间代码。然后,为了发生冲突,您需要让2个用户在同一时间选择完全相同的名称。在日期时间代码中包含秒数,并且碰撞的机会接近(但永远不等于)零。

答案 1 :(得分:1)

尽管以前曾发生过SHA1冲突攻击,但SHA1哈希冲突概率仍然很低,在大多数情况下可以认为可以安全地用作文件名。

另一种常见方法是对每个文件使用GUID / UUID。因此,剩下的唯一问题是您如何处理两个用户上传的两个相同文件。最简单的方法是将它们视为两个单独的文件,并且它们都不会相互影响。

尽管有时您可能会担心存储空间。例如,如果上载的文件确实很大,则可能要考虑将两个相同的文件存储为一个,以节省空间。根据系统的用户体验,之后可能需要处理某些情况,例如,两个用户之一删除文件时。但是,这些并不难处理,仅取决于系统的其余部分。