使用MD5或random进行文件命名?

使用MD5或random进行文件命名?,random,upload,md5,Random,Upload,Md5,哪种文件命名方法更好 方法1: MD5是一个字符串/文件(无论什么),我们使用32个字符串长度的[0-9a-z]字符获得结果 (10+26)^32个组合 方法2: 使用PHP随机生成一组字符串长度为32的字符[0-9a-zA-Z]字符 (10+26+26)^32个组合 显然,方法2具有更多的组合性和随机性,但为什么人们不使用方法2而使用方法1?我可以想到两个原因: 某些文件系统(例如VFAT、FAT32)不支持区分大小写的文件名 MD5散列的值不仅仅是随机的,也就是说,它可以用于对文件进

哪种文件命名方法更好

方法1:

  • MD5是一个字符串/文件(无论什么),我们使用32个字符串长度的[0-9a-z]字符获得结果
  • (10+26)^32个组合
方法2:

  • 使用PHP随机生成一组字符串长度为32的字符[0-9a-zA-Z]字符
  • (10+26+26)^32个组合

显然,方法2具有更多的组合性和随机性,但为什么人们不使用方法2而使用方法1?

我可以想到两个原因:

  • 某些文件系统(例如VFAT、FAT32)不支持区分大小写的文件名
  • MD5散列的值不仅仅是随机的,也就是说,它可以用于对文件进行指纹识别/校验和。这可以帮助您:
    • 验证文件的内容自创建以来未发生更改
    • 防止存储重复的内容
  • 原因有三

    • 没有多少人意识到rand()提供了更多的随机性
    • md5在大多数情况下都有效。历史上,它一直被用作事物的唯一标识符,因此人们喜欢使用它,因为它非常常见
    • 正如@Robby所指出的,一些操作系统(如windows)不支持区分大小写的文件名。
      aaaaa.txt
      aaAAaa.txt
      在unix系统上是两种不同的东西,但在windows系统上是相同的

    因为一些愚蠢的文件系统没有区分大小写的文件名,而且因为MD5散列的含义不仅仅是随机的,例如,可以用作文件的指纹/校验和。我们需要在什么情况下检查上载文件的总和?它允许您验证内容是否未更改。我怀疑防止存储重复内容的用途;i、 e如果两个用户上传相同的图像,其中一个用户想要删除服务器上的图像,那么我会删除共享图像吗?@SacbmcpdSamuel这个论点站不住脚。在决定删除图像之前,检查图像是否仍被其他用户引用是很简单的。这与在清理桌子之前询问每个人是否都吃完了一样。@SacbmcpdSamuel更好的做法是删除引用,然后运行计划的(每日、每周或其他)清理作业来删除不再被引用的文件。用户会想知道为什么产品被删除了,而图像src仍然存在?我认为unique string适合我而不是md5。