Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以对文件名使用MD5或SHA1哈希吗? 让我们考虑一个用户可以上传文件的网站。我可以使用其内容的MD5或SHA1哈希作为文件名吗?如果没有,我应该使用什么?为了避免冲突。_Python_Django_Md5_Filenames_Sha1 - Fatal编程技术网

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

Python 我可以对文件名使用MD5或SHA1哈希吗? 让我们考虑一个用户可以上传文件的网站。我可以使用其内容的MD5或SHA1哈希作为文件名吗?如果没有,我应该使用什么?为了避免冲突。,python,django,md5,filenames,sha1,Python,Django,Md5,Filenames,Sha1,除了保留字符,您几乎可以使用任何文件名。除了散列值之外,这些特定的选择不会告诉您任何关于文件本身的信息。如果他们没有上传相同的文件,这将防止文件命名冲突。如果你不在乎那件事,就去做吧 通常人们上传文件是为了让别人把它们拉回来。所以你需要有一个某种描述符;否则,用户需要打开大量文件才能获得所需的文件。也许更好的选择是让用户选择一个不超过字符限制的名称,然后附加datetime代码。然后,为了产生冲突,需要两个用户同时选择完全相同的名称。在datetime代码中包含秒数,碰撞概率接近但不等于零 除了

除了保留字符,您几乎可以使用任何文件名。除了散列值之外,这些特定的选择不会告诉您任何关于文件本身的信息。如果他们没有上传相同的文件,这将防止文件命名冲突。如果你不在乎那件事,就去做吧


通常人们上传文件是为了让别人把它们拉回来。所以你需要有一个某种描述符;否则,用户需要打开大量文件才能获得所需的文件。也许更好的选择是让用户选择一个不超过字符限制的名称,然后附加datetime代码。然后,为了产生冲突,需要两个用户同时选择完全相同的名称。在datetime代码中包含秒数,碰撞概率接近但不等于零

除了保留字符,您几乎可以使用任何文件名。除了散列值之外,这些特定的选择不会告诉您任何关于文件本身的信息。如果他们没有上传相同的文件,这将防止文件命名冲突。如果你不在乎那件事,就去做吧


通常人们上传文件是为了让别人把它们拉回来。所以你需要有一个某种描述符;否则,用户需要打开大量文件才能获得所需的文件。也许更好的选择是让用户选择一个不超过字符限制的名称,然后附加datetime代码。然后,为了产生冲突,需要两个用户同时选择完全相同的名称。在datetime代码中包含秒数,碰撞概率接近但不等于零

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

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


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

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

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


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

GUID?否则两个用户上载同一个文件会发生冲突。@AlexK:取决于write Django,默认情况下,如果需要,会选择一个唯一的文件名附加到给定的文件名。是否要进行重复数据消除?否则,使用具有足够位数的随机洗牌。实际上,我现在使用NamedTemporaryFile从旧数据库导入数据。但是使用散列可以简化一些事情。可能不多。不过,我还是可以吃杂烩吗@我想避免碰撞。用户上载的文件被另一个用户覆盖。GUID?否则两个用户上载同一个文件会发生冲突。@AlexK:取决于write Django,默认情况下,如果需要,会选择一个唯一的文件名附加到给定的文件名。是否要进行重复数据消除?否则,使用具有足够位数的随机洗牌。实际上,我现在使用NamedTemporaryFile从旧数据库导入数据。但是使用散列可以简化一些事情。可能不多。不过,我还是可以吃杂烩吗@我想避免碰撞。一个用户上传的文件会被另一个用户覆盖。据我所知,散列很容易发生冲突。也就是说,文件可能有不同的内容,但仍然有相同的哈希值。即使文件是相同的,它们也属于不同的人。每个人都必须有自己的副本。那是
这比假设的要简单,那个文件可能属于几个人。例如,删除文件时进行额外检查。说到你的建议,这只会让用户的生活更加艰难。可能会有一些例外,但通常情况下,要求用户提供一个合理的文件名并没有多大意义。如果我错了,请纠正我。再想一想,你可能是对的。使用有意义的文件名通常是有意义的。这可能对搜索引擎优化也有好处。据我所知,哈希容易发生冲突。也就是说,文件可能有不同的内容,但仍然有相同的哈希值。即使文件是相同的,它们也属于不同的人。每个人都必须有自己的副本。这比假设的要简单,该文件可能属于几个人。例如,删除文件时进行额外检查。说到你的建议,这只会让用户的生活更加艰难。可能会有一些例外,但通常情况下,要求用户提供一个合理的文件名并没有多大意义。如果我错了,请纠正我。再想一想,你可能是对的。使用有意义的文件名通常是有意义的。这可能对SEO也有好处。我相信我在使用MD5时遇到了一个问题,如果我没记错的话,那不是关于删除,而是关于文件不完全相同。虽然,我可能错了。无论如何,在使用MD5时,您最好编写预期会发生冲突的代码。@x-yuri这很有趣。不知道你的系统上传文件的使用率是多少。我甚至不知道那是什么项目。我不确定我上面说的是真的。我想是有什么问题让我想了想,但还是不确定。问题中的项目还没有启动,我说的是另一个。我相信我在使用MD5时遇到了一个问题,如果我没有记错的话,那不是关于删除,而是关于文件不相同。虽然,我可能错了。无论如何,在使用MD5时,您最好编写预期会发生冲突的代码。@x-yuri这很有趣。不知道你的系统上传文件的使用率是多少。我甚至不知道那是什么项目。我不确定我上面说的是真的。我想是有什么问题让我想了想,但还是不确定。问题中的项目尚未启动,我指的是另一个项目。